fix memory leak in err.c
diff --git a/CHANGES b/CHANGES
index 8ed1b98..4c8a93c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,9 @@
 
  Changes between 0.9.6 and 0.9.7  [xx XXX 2000]
 
+  *) Fix a memory leak in err.c: free err_data string if necessary.
+     [Bodo Moeller]
+
   *) Function EC_POINTs_mul for simultaneous scalar multiplication
      of an arbitrary number of elliptic curve points, optionally
      including the generator defined for the EC_GROUP.
diff --git a/crypto/err/err.c b/crypto/err/err.c
index 145fdc5..91b0295 100644
--- a/crypto/err/err.c
+++ b/crypto/err/err.c
@@ -466,7 +466,15 @@
 			}
 		}
 
-	if (data != NULL)
+	if (data == NULL)
+		{
+		if (inc && (es->err_data[i] != NULL) && (es->err_data_flags[i] & ERR_TXT_MALLOCED))
+			{
+			OPENSSL_free(es->err_data[i]);
+			es->err_data[i] = NULL;
+			}
+		}
+	else
 		{
 		if (es->err_data[i] == NULL)
 			{