don't free memory unless we allocated it.
authortedu <tedu@openbsd.org>
Wed, 7 May 2014 21:18:53 +0000 (21:18 +0000)
committertedu <tedu@openbsd.org>
Wed, 7 May 2014 21:18:53 +0000 (21:18 +0000)
reported to openssl by David Ramos (rt 3338)
stealing commit from logan, who's run away. ok miod.

lib/libcrypto/ec/ec_asn1.c
lib/libssl/src/crypto/ec/ec_asn1.c

index 70670a4..0ea0d6e 100644 (file)
@@ -1233,8 +1233,10 @@ i2o_ECPublicKey(EC_KEY * a, unsigned char **out)
        if (!EC_POINT_point2oct(a->group, a->pub_key, a->conv_form,
                *out, buf_len, NULL)) {
                ECerr(EC_F_I2O_ECPUBLICKEY, ERR_R_EC_LIB);
-               free(*out);
-               *out = NULL;
+               if (new_buffer) {
+                       free(*out);
+                       *out = NULL;
+               }
                return 0;
        }
        if (!new_buffer)
index 70670a4..0ea0d6e 100644 (file)
@@ -1233,8 +1233,10 @@ i2o_ECPublicKey(EC_KEY * a, unsigned char **out)
        if (!EC_POINT_point2oct(a->group, a->pub_key, a->conv_form,
                *out, buf_len, NULL)) {
                ECerr(EC_F_I2O_ECPUBLICKEY, ERR_R_EC_LIB);
-               free(*out);
-               *out = NULL;
+               if (new_buffer) {
+                       free(*out);
+                       *out = NULL;
+               }
                return 0;
        }
        if (!new_buffer)