From 393f2c651d154a8d576969f24317536f89f28649 Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Mon, 4 Oct 1999 12:08:59 +0000 Subject: [PATCH] Fix for d2i_ASN1_bytes and stop PKCS#7 routines crashing is signed message contains no certificates. Also fix typo in RANLIB changes. --- CHANGES | 10 ++++++++++ Makefile.org | 2 +- crypto/asn1/a_bytes.c | 3 ++- crypto/x509/x509_cmp.c | 2 ++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index fcd0147ba4..a7339e67e1 100644 --- 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 ] + + *) 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 ] + *) 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 diff --git a/Makefile.org b/Makefile.org index e2a2552793..45a9678cc3 100644 --- a/Makefile.org +++ b/Makefile.org @@ -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 \ diff --git a/crypto/asn1/a_bytes.c b/crypto/asn1/a_bytes.c index e452e03b88..c894f5664c 100644 --- a/crypto/asn1/a_bytes.c +++ b/crypto/asn1/a_bytes.c @@ -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 diff --git a/crypto/x509/x509_cmp.c b/crypto/x509/x509_cmp.c index be29979092..6213ec2f8d 100644 --- a/crypto/x509/x509_cmp.c +++ b/crypto/x509/x509_cmp.c @@ -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; -- 2.25.1