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)
{