summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--std/textproto/mod.ts10
-rw-r--r--std/textproto/test.ts9
2 files changed, 7 insertions, 12 deletions
diff --git a/std/textproto/mod.ts b/std/textproto/mod.ts
index 06ffb7364..218ec9d44 100644
--- a/std/textproto/mod.ts
+++ b/std/textproto/mod.ts
@@ -74,22 +74,16 @@ export class TextProtoReader {
if (kv === Deno.EOF) throw new Deno.errors.UnexpectedEof();
if (kv.byteLength === 0) return m;
- // Key ends at first colon; should not have trailing spaces
- // but they appear in the wild, violating specs, so we remove
- // them if present.
+ // Key ends at first colon
let i = kv.indexOf(charCode(":"));
if (i < 0) {
throw new Deno.errors.InvalidData(
`malformed MIME header line: ${str(kv)}`
);
}
- let endKey = i;
- while (endKey > 0 && kv[endKey - 1] == charCode(" ")) {
- endKey--;
- }
//let key = canonicalMIMEHeaderKey(kv.subarray(0, endKey));
- const key = str(kv.subarray(0, endKey));
+ const key = str(kv.subarray(0, i));
// As per RFC 7230 field-name is a token,
// tokens consist of one or more chars.
diff --git a/std/textproto/test.ts b/std/textproto/test.ts
index 5833935ba..b9947ab33 100644
--- a/std/textproto/test.ts
+++ b/std/textproto/test.ts
@@ -94,7 +94,7 @@ test({
},
});
-// Test that we read slightly-bogus MIME headers seen in the wild,
+// Test that we don't read MIME headers seen in the wild,
// with spaces before colons, and spaces in keys.
test({
name: "[textproto] Reader : MIME Header Non compliant",
@@ -109,9 +109,10 @@ test({
const m = assertNotEOF(await r.readMIMEHeader());
assertEquals(m.get("Foo"), "bar");
assertEquals(m.get("Content-Language"), "en");
- assertEquals(m.get("SID"), "0");
- assertEquals(m.get("Privilege"), "127");
- // Not a legal http header
+ // Make sure we drop headers with trailing whitespace
+ assertEquals(m.get("SID"), null);
+ assertEquals(m.get("Privilege"), null);
+ // Not legal http header
assertThrows((): void => {
assertEquals(m.get("Audio Mode"), "None");
});