You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
2.0 KiB
55 lines
2.0 KiB
diff -up openssl-1.0.1e/crypto/pkcs7/pk7_doit.c.missing-content openssl-1.0.1e/crypto/pkcs7/pk7_doit.c |
|
--- openssl-1.0.1e/crypto/pkcs7/pk7_doit.c.missing-content 2015-05-25 12:03:41.000000000 +0200 |
|
+++ openssl-1.0.1e/crypto/pkcs7/pk7_doit.c 2015-06-09 15:21:21.377951520 +0200 |
|
@@ -472,6 +472,12 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKE |
|
switch (i) |
|
{ |
|
case NID_pkcs7_signed: |
|
+ /* |
|
+ * p7->d.sign->contents is a PKCS7 structure consisting of a contentType |
|
+ * field and optional content. |
|
+ * data_body is NULL if that structure has no (=detached) content |
|
+ * or if the contentType is wrong (i.e., not "data"). |
|
+ */ |
|
data_body=PKCS7_get_octet_string(p7->d.sign->contents); |
|
if (!PKCS7_is_detached(p7) && data_body == NULL) |
|
{ |
|
@@ -484,6 +490,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKE |
|
case NID_pkcs7_signedAndEnveloped: |
|
rsk=p7->d.signed_and_enveloped->recipientinfo; |
|
md_sk=p7->d.signed_and_enveloped->md_algs; |
|
+ /* data_body is NULL if the optional EncryptedContent is missing. */ |
|
data_body=p7->d.signed_and_enveloped->enc_data->enc_data; |
|
enc_alg=p7->d.signed_and_enveloped->enc_data->algorithm; |
|
evp_cipher=EVP_get_cipherbyobj(enc_alg->algorithm); |
|
@@ -496,6 +503,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKE |
|
case NID_pkcs7_enveloped: |
|
rsk=p7->d.enveloped->recipientinfo; |
|
enc_alg=p7->d.enveloped->enc_data->algorithm; |
|
+ /* data_body is NULL if the optional EncryptedContent is missing. */ |
|
data_body=p7->d.enveloped->enc_data->enc_data; |
|
evp_cipher=EVP_get_cipherbyobj(enc_alg->algorithm); |
|
if (evp_cipher == NULL) |
|
@@ -509,6 +517,13 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKE |
|
goto err; |
|
} |
|
|
|
+ /* Detached content must be supplied via in_bio instead. */ |
|
+ if (data_body == NULL && in_bio == NULL) |
|
+ { |
|
+ PKCS7err(PKCS7_F_PKCS7_DATADECODE, PKCS7_R_NO_CONTENT); |
|
+ goto err; |
|
+ } |
|
+ |
|
/* We will be checking the signature */ |
|
if (md_sk != NULL) |
|
{ |
|
@@ -665,7 +680,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKE |
|
} |
|
|
|
#if 1 |
|
- if (PKCS7_is_detached(p7) || (in_bio != NULL)) |
|
+ if (in_bio != NULL) |
|
{ |
|
bio=in_bio; |
|
}
|
|
|