X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fasn1%2Fn_pkey.c;h=5a7d494ff06f39501b776bcf5939379f5cd0a6df;hp=cdc0d8b7c46d5e2e7788bf4ffbfc2f8196b5384c;hb=b4b41f48d1cfb6151e24e9c5f28019d3cfa5ec96;hpb=f5d7a031a3c3e7b1700a67d6dc19daf3718ce6ee diff --git a/crypto/asn1/n_pkey.c b/crypto/asn1/n_pkey.c index cdc0d8b7c4..5a7d494ff0 100644 --- a/crypto/asn1/n_pkey.c +++ b/crypto/asn1/n_pkey.c @@ -139,7 +139,7 @@ int i2d_Netscape_RSA(RSA *a, unsigned char **pp, int (*cb)()) } if (pkey->private_key->data != NULL) - Free((char *)pkey->private_key->data); + Free(pkey->private_key->data); if ((pkey->private_key->data=(unsigned char *)Malloc(l[0])) == NULL) { ASN1err(ASN1_F_I2D_NETSCAPE_RSA,ERR_R_MALLOC_FAILURE); @@ -205,13 +205,17 @@ RSA *d2i_Netscape_RSA(RSA **a, unsigned char **pp, long length, int (*cb)()) (char *)os->data,os->length) != 0)) { ASN1err(ASN1_F_D2I_NETSCAPE_RSA,ASN1_R_PRIVATE_KEY_HEADER_MISSING); - ASN1_BIT_STRING_free(os); + M_ASN1_BIT_STRING_free(os); goto err; } - ASN1_BIT_STRING_free(os); + M_ASN1_BIT_STRING_free(os); c.q=c.p; if ((ret=d2i_Netscape_RSA_2(a,&c.p,c.slen,cb)) == NULL) goto err; - c.slen-=(c.p-c.q); + /* Note: some versions of IIS key files use length values that are + * too small for the surrounding SEQUENCEs. This following line + * effectively disable length checking. + */ + c.slen = 0; M_ASN1_D2I_Finish(a,RSA_free,ASN1_F_D2I_NETSCAPE_RSA); } @@ -279,7 +283,7 @@ RSA *d2i_Netscape_RSA_2(RSA **a, unsigned char **pp, long length, *pp=c.p; err: if (pkey != NULL) NETSCAPE_PKEY_free(pkey); - if (os != NULL) ASN1_BIT_STRING_free(os); + if (os != NULL) M_ASN1_BIT_STRING_free(os); if (alg != NULL) X509_ALGOR_free(alg); return(ret); } @@ -321,9 +325,9 @@ static NETSCAPE_PKEY *NETSCAPE_PKEY_new(void) ASN1_CTX c; M_ASN1_New_Malloc(ret,NETSCAPE_PKEY); - M_ASN1_New(ret->version,ASN1_INTEGER_new); + M_ASN1_New(ret->version,M_ASN1_INTEGER_new); M_ASN1_New(ret->algor,X509_ALGOR_new); - M_ASN1_New(ret->private_key,ASN1_OCTET_STRING_new); + M_ASN1_New(ret->private_key,M_ASN1_OCTET_STRING_new); return(ret); M_ASN1_New_Error(ASN1_F_NETSCAPE_PKEY_NEW); } @@ -331,11 +335,18 @@ static NETSCAPE_PKEY *NETSCAPE_PKEY_new(void) static void NETSCAPE_PKEY_free(NETSCAPE_PKEY *a) { if (a == NULL) return; - ASN1_INTEGER_free(a->version); + M_ASN1_INTEGER_free(a->version); X509_ALGOR_free(a->algor); - ASN1_OCTET_STRING_free(a->private_key); - Free((char *)a); + M_ASN1_OCTET_STRING_free(a->private_key); + Free(a); } #endif /* NO_RC4 */ + +#else /* !NO_RSA */ + +# if PEDANTIC +static void *dummy=&dummy; +# endif + #endif