Hi:
  I found there is something wrong in crypto/asn1/asn1_mac.h and crypto/pkcs7/pk7_lib.c
 
in crypto/asn1/asn1_mac.h
 
the OLD code is:
  #define M_ASN1_D2I_get(b,func) \
 c.q=c.p; \
 if (func(&(b),&c.p,c.slen) == NULL) \
  {c.line=__LINE__; goto err; } \
 c.slen-=(c.p-c.q);
 
and I changed it to:
 
#define M_ASN1_D2I_get(b,func) \
 c.q=c.p; \
        if (c.p+c.slen>c.max)\
  {c.line=__LINE__; goto err; } \
 if (func(&(b),&c.p,c.slen) == NULL) \
  {c.line=__LINE__; goto err; } \
 c.slen-=(c.p-c.q);
 
in crypto/pkcs7/pk7_lib.c
 
X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si)
 {
//gongxy 2000 MODIFY BEGIN
 /*
 if (PKCS7_type_is_signed(p7))
  return(X509_find_by_issuer_and_serial(p7->d.sign->cert,
   si->issuer_and_serial->issuer,
   si->issuer_and_serial->serial));
 else
  return(NULL);
  */
if (PKCS7_type_is_signed(p7))
  return(X509_find_by_issuer_and_serial(p7->d.sign->cert,
   si->issuer_and_serial->issuer,
   si->issuer_and_serial->serial));
if (PKCS7_type_is_signedAndEnveloped(p7))
   return(X509_find_by_issuer_and_serial(p7->d.signed_and_enveloped->cert,
   si->issuer_and_serial->issuer,
   si->issuer_and_serial->serial));
  return(NULL);
//gongxy 2000 MODIFY END
 }
Is it OK ?
 

Reply via email to