diff options
author | Andreas Steffen <andreas.steffen@strongswan.org> | 2008-02-05 19:27:05 +0000 |
---|---|---|
committer | Andreas Steffen <andreas.steffen@strongswan.org> | 2008-02-05 19:27:05 +0000 |
commit | 298c9c8eed4f5178acfcaa9cc65ebb802ee2e7ed (patch) | |
tree | 00ca8b7954cd8784776c0ceeb1090bff2b6cb113 /src | |
parent | 5bbac9ffff31015640729c2a7881f34f245c5793 (diff) | |
download | strongswan-298c9c8eed4f5178acfcaa9cc65ebb802ee2e7ed.tar.bz2 strongswan-298c9c8eed4f5178acfcaa9cc65ebb802ee2e7ed.tar.xz |
some websites append a newline character to a DER-encoded binary blob
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/asn1/asn1.c | 18 | ||||
-rw-r--r-- | src/pluto/asn1.c | 22 |
2 files changed, 30 insertions, 10 deletions
diff --git a/src/libstrongswan/asn1/asn1.c b/src/libstrongswan/asn1/asn1.c index f692a4339..b53f5a766 100644 --- a/src/libstrongswan/asn1/asn1.c +++ b/src/libstrongswan/asn1/asn1.c @@ -677,13 +677,23 @@ bool is_asn1(chunk_t blob) DBG2(" file content is not binary ASN.1"); return FALSE; } + len = asn1_length(&blob); - if (len != blob.len) + + /* exact match */ + if (len == blob.len) { - DBG2(" file size does not match ASN.1 coded length"); - return FALSE; + return TRUE; } - return TRUE; + + /* some websites append a surplus newline character to the blob */ + if (len + 1 == blob.len && *(blob.ptr + len) == '\n') + { + return TRUE; + } + + DBG2(" file size does not match ASN.1 coded length"); + return FALSE; } /** diff --git a/src/pluto/asn1.c b/src/pluto/asn1.c index dafc6b19c..bcfdca15e 100644 --- a/src/pluto/asn1.c +++ b/src/pluto/asn1.c @@ -758,13 +758,23 @@ is_asn1(chunk_t blob) ) return FALSE; } + len = asn1_length(&blob); - if (len != blob.len) + + /* exact match */ + if (len == blob.len) { - DBG(DBG_PARSING, - DBG_log(" file size does not match ASN.1 coded length"); - ) - return FALSE; + return TRUE; } - return TRUE; + + /* some websites append a surplus newline character to the blob */ + if (len + 1 == blob.len && *(blob.ptr + len) == '\n') + { + return TRUE; + } + + DBG(DBG_PARSING, + DBG_log(" file size does not match ASN.1 coded length"); + ) + return FALSE; } |