When the malloc() fails, the original code would still try to access
the (invalid) pointer.

--- \\Debbie\ger\prj\1original\openssl\openssl\crypto\dsa\dsa_asn1.c    
2008-11-12
20:36:01.000000000 +-0100
+++ \\Debbie\ger\prj\3actual\openssl\crypto\dsa\dsa_asn1.c      2008-11-12
21:29:50.000000000 +-0100
@@ -66,16 +66,19 @@
 static int sig_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
                                                                void *exarg)
 {
        if(operation == ASN1_OP_NEW_PRE) {
                DSA_SIG *sig;
                sig = OPENSSL_malloc(sizeof(DSA_SIG));
+               if (!sig) /* [i_a] */
+               {
+                       DSAerr(DSA_F_SIG_CB, ERR_R_MALLOC_FAILURE);
+                       return 0;
+               }
                sig->r = NULL;
                sig->s = NULL;
                *pval = (ASN1_VALUE *)sig;
-               if(sig) return 2;
-               DSAerr(DSA_F_SIG_CB, ERR_R_MALLOC_FAILURE);
-               return 0;
+               return 2;
        }
        return 1;
 }



-- 
Met vriendelijke groeten / Best regards,

Ger Hobbelt

--------------------------------------------------
web:    http://www.hobbelt.com/
        http://www.hebbut.net/
mail:   [EMAIL PROTECTED]
mobile: +31-6-11 120 978
--------------------------------------------------

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [email protected]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to