On 21.04.14 04:56, Ted Unangst wrote:

> Also, can you include diffs inline please? One diff per email. Maybe
> just one or two emails to start, then try sending the rest after we
> see how that goes?

fix memory leak in a2i_ASN1_ENUMERATED, a2i_ASN1_STRING and
a2i_ASN1_INTEGER, in case of of goto err

Index: f_enum.c
===================================================================
RCS file: /cvs/src/lib/libssl/src/crypto/asn1/f_enum.c,v
retrieving revision 1.7
diff -u -r1.7 f_enum.c
--- f_enum.c    19 Apr 2014 06:43:34 -0000      1.7
+++ f_enum.c    21 Apr 2014 03:29:56 -0000
@@ -163,8 +163,6 @@
                        if (sp == NULL) {
                                ASN1err(ASN1_F_A2I_ASN1_ENUMERATED,
                                    ERR_R_MALLOC_FAILURE);
-                               if (s != NULL)
-                                       free(s);
                                goto err;
                        }
                        s = sp;
@@ -196,12 +194,11 @@
        }
        bs->length = num;
        bs->data = s;
-       ret = 1;
+       return (1);

-err:
-       if (0) {
 err_sl:
-               ASN1err(ASN1_F_A2I_ASN1_ENUMERATED, ASN1_R_SHORT_LINE);
-       }
+       ASN1err(ASN1_F_A2I_ASN1_ENUMERATED, ASN1_R_SHORT_LINE);
+err:
+       free(s);
        return (ret);
 }
Index: f_int.c
===================================================================
RCS file: /cvs/src/lib/libssl/src/crypto/asn1/f_int.c,v
retrieving revision 1.11
diff -u -r1.11 f_int.c
--- f_int.c     19 Apr 2014 06:43:34 -0000      1.11
+++ f_int.c     21 Apr 2014 03:29:56 -0000
@@ -167,8 +167,6 @@
                        if (sp == NULL) {
                                ASN1err(ASN1_F_A2I_ASN1_INTEGER,
                                    ERR_R_MALLOC_FAILURE);
-                               if (s != NULL)
-                                       free(s);
                                goto err;
                        }
                        s = sp;
@@ -200,12 +198,11 @@
        }
        bs->length = num;
        bs->data = s;
-       ret = 1;
+       return (1);

-err:
-       if (0) {
 err_sl:
-               ASN1err(ASN1_F_A2I_ASN1_INTEGER, ASN1_R_SHORT_LINE);
-       }
+       ASN1err(ASN1_F_A2I_ASN1_INTEGER, ASN1_R_SHORT_LINE);
+err:
+       free(s);
        return (ret);
 }
Index: f_string.c
===================================================================
RCS file: /cvs/src/lib/libssl/src/crypto/asn1/f_string.c,v
retrieving revision 1.9
diff -u -r1.9 f_string.c
--- f_string.c  19 Apr 2014 06:43:34 -0000      1.9
+++ f_string.c  21 Apr 2014 03:29:56 -0000
@@ -159,8 +159,6 @@
                        if (sp == NULL) {
                                ASN1err(ASN1_F_A2I_ASN1_STRING,
                                    ERR_R_MALLOC_FAILURE);
-                               if (s != NULL)
-                                       free(s);
                                goto err;
                        }
                        s = sp;
@@ -192,12 +190,11 @@
        }
        bs->length = num;
        bs->data = s;
-       ret = 1;
+       return (1);

-err:
-       if (0) {
 err_sl:
-               ASN1err(ASN1_F_A2I_ASN1_STRING, ASN1_R_SHORT_LINE);
-       }
+       ASN1err(ASN1_F_A2I_ASN1_STRING, ASN1_R_SHORT_LINE);
+err:
+       free(s);
        return (ret);
 }

Reply via email to