diff options
author | Andreas Steffen <andreas.steffen@strongswan.org> | 2008-02-02 00:29:03 +0000 |
---|---|---|
committer | Andreas Steffen <andreas.steffen@strongswan.org> | 2008-02-02 00:29:03 +0000 |
commit | 9514d26c5c7d154034a5c860d418cf7d046ab5dc (patch) | |
tree | f36520d440646e2a7fe6fdc2c8fe9d3471bb65ed /src | |
parent | f4a459473eab391fd8a74cb021620e1a22046242 (diff) | |
download | strongswan-9514d26c5c7d154034a5c860d418cf7d046ab5dc.tar.bz2 strongswan-9514d26c5c7d154034a5c860d418cf7d046ab5dc.tar.xz |
parse signedData object with empty content
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/crypto/pkcs7.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/libstrongswan/crypto/pkcs7.c b/src/libstrongswan/crypto/pkcs7.c index 4ff45112b..252fc19b2 100644 --- a/src/libstrongswan/crypto/pkcs7.c +++ b/src/libstrongswan/crypto/pkcs7.c @@ -8,6 +8,7 @@ /* * Copyright (C) 2005 Jan Hutter, Martin Willi * Copyright (C) 2002-2008 Andreas Steffen + * * Hochschule fuer Technik Rapperswil, Switzerland * * This program is free software; you can redistribute it and/or modify it @@ -301,6 +302,11 @@ static bool parse_data(private_pkcs7_t *this) { return FALSE; } + if (data.len == 0) + { + this->data = chunk_empty; + return TRUE; + } if (parse_asn1_simple_object(&data, ASN1_OCTET_STRING, this->level, "data")) { this->data = chunk_clone(data); @@ -313,7 +319,7 @@ static bool parse_data(private_pkcs7_t *this) } /** - * Parse PKCS#7 signedData content + * Implements pkcs7_t.parse_signedData. */ static bool parse_signedData(private_pkcs7_t *this, x509_t *cacert) { @@ -349,6 +355,7 @@ static bool parse_signedData(private_pkcs7_t *this, x509_t *cacert) break; case PKCS7_SIGNED_CONTENT_INFO: { + chunk_t pureData; pkcs7_t *data = pkcs7_create_from_chunk(object, level+1); if (data == NULL) @@ -360,7 +367,8 @@ static bool parse_signedData(private_pkcs7_t *this, x509_t *cacert) data->destroy(data); return FALSE; } - this->data = chunk_clone(data->get_data(data)); + pureData = data->get_data(data); + this->data = (pureData.len)? chunk_clone(pureData) : chunk_empty; data->destroy(data); } break; @@ -973,7 +981,7 @@ static bool parse_contentInfo(chunk_t blob, u_int level0, private_pkcs7_t *cInfo return FALSE; } } - else if (objectID == PKCS7_INFO_CONTENT) + else if (objectID == PKCS7_INFO_CONTENT && object.len > 0) { cInfo->content = chunk_clone(object); } |