some websites append a newline character to a DER-encoded binary blob
authorAndreas Steffen <andreas.steffen@strongswan.org>
Tue, 5 Feb 2008 19:27:05 +0000 (19:27 -0000)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Tue, 5 Feb 2008 19:27:05 +0000 (19:27 -0000)
src/libstrongswan/asn1/asn1.c
src/pluto/asn1.c

index f692a43..b53f5a7 100644 (file)
@@ -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;
 }
 
 /**
index dafc6b1..bcfdca1 100644 (file)
@@ -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;
 }