Fix for d2i_ASN1_bytes and stop PKCS#7 routines crashing is signed message
authorDr. Stephen Henson <steve@openssl.org>
Mon, 4 Oct 1999 12:08:59 +0000 (12:08 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Mon, 4 Oct 1999 12:08:59 +0000 (12:08 +0000)
contains no certificates.

Also fix typo in RANLIB changes.

CHANGES
Makefile.org
crypto/asn1/a_bytes.c
crypto/x509/x509_cmp.c

diff --git a/CHANGES b/CHANGES
index fcd0147ba4837cdfdd74791fbb9208b7665b8e32..a7339e67e1495949543fb54eefcc116833523bf3 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,16 @@
 
  Changes between 0.9.4 and 0.9.5  [xx XXX 1999]
 
+  *) Fix so PKCS7_dataVerify() doesn't crash if no certificates are contained
+     in the message. This was handled by allowing
+     X509_find_by_issuer_and_serial() to tolerate a NULL passed to it.
+     [Steve Henson, reported by Sampo Kellomaki <sampo@mail.neuronio.pt>]
+
+  *) Fix for bug in d2i_ASN1_bytes(): other ASN1 functions add an extra null
+     to the end of the strings whereas this didn't. This would cause problems
+     if strings read with d2i_ASN1_bytes() were later modified.
+     [Steve Henson, reported by Arne Ansper <arne@ats.cyber.ee>]
+
   *) Fix for base64 decode bug. When a base64 bio reads only one line of
      data and it contains EOF it will end up returning an error. This is
      caused by input 46 bytes long. The cause is due to the way base64
index e2a2552793c73c732d9cb213094dfde1f7745e33..45a9678cc327da1a08fb8b344f64349984f9567e 100644 (file)
@@ -342,7 +342,7 @@ install: all
        @for i in $(DIRS) ;\
        do \
        (cd $$i; echo "installing $$i..."; \
-       $(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' EX_LIBS='${EX_LIBS}' SDIRS='${SDIRS}' RANLIB='${RANLIB} install ); \
+       $(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' EX_LIBS='${EX_LIBS}' SDIRS='${SDIRS}' RANLIB='${RANLIB}' install ); \
        done
        @for i in $(LIBS) ;\
        do \
index e452e03b88f84cf6ef6533f17a685def3e28ffe9..c894f5664ce59c6098486186f74c8f11d9f34112 100644 (file)
@@ -219,7 +219,7 @@ ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp, long length,
                        if ((ret->length < len) || (ret->data == NULL))
                                {
                                if (ret->data != NULL) Free((char *)ret->data);
-                               s=(unsigned char *)Malloc((int)len);
+                               s=(unsigned char *)Malloc((int)len + 1);
                                if (s == NULL)
                                        {
                                        i=ERR_R_MALLOC_FAILURE;
@@ -229,6 +229,7 @@ ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp, long length,
                        else
                                s=ret->data;
                        memcpy(s,p,(int)len);
+                       s[len] = '\0';
                        p+=len;
                        }
                else
index be2997909204b316b4d25930f68217cd58f4aa0a..6213ec2f8d90acc7a66b80285fbb4032d6c02a28 100644 (file)
@@ -207,6 +207,8 @@ X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name,
        X509_CINF cinf;
        X509 x,*x509=NULL;
 
+       if(!sk) return NULL;
+
        x.cert_info= &cinf;
        cinf.serialNumber=serial;
        cinf.issuer=name;