From: Martin Willi Date: Mon, 30 Aug 2010 09:22:54 +0000 (+0200) Subject: Unwrap crlNumber INTEGER in openssl CRL parsing X-Git-Tag: 4.5.0~385 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2291754ddf02b0903b18533782610407d9d3ad8b;p=thirdparty%2Fstrongswan.git Unwrap crlNumber INTEGER in openssl CRL parsing --- diff --git a/src/libstrongswan/plugins/openssl/openssl_crl.c b/src/libstrongswan/plugins/openssl/openssl_crl.c index 5645d72d73..b9d97a9018 100644 --- a/src/libstrongswan/plugins/openssl/openssl_crl.c +++ b/src/libstrongswan/plugins/openssl/openssl_crl.c @@ -416,10 +416,19 @@ static bool parse_authKeyIdentifier_ext(private_openssl_crl_t *this, static bool parse_crlNumber_ext(private_openssl_crl_t *this, X509_EXTENSION *ext) { - free(this->serial.ptr); - this->serial = chunk_clone( - openssl_asn1_str2chunk(X509_EXTENSION_get_data(ext))); - return this->serial.len != 0; + chunk_t chunk; + + chunk = openssl_asn1_str2chunk(X509_EXTENSION_get_data(ext)); + /* quick and dirty INTEGER unwrap */ + if (chunk.len > 1 && chunk.ptr[0] == V_ASN1_INTEGER && + chunk.ptr[1] == chunk.len - 2) + { + chunk = chunk_skip(chunk, 2); + free(this->serial.ptr); + this->serial = chunk_clone(chunk); + return TRUE; + } + return FALSE; } /**