summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser5.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser5.js')
-rw-r--r--comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser5.js104
1 files changed, 104 insertions, 0 deletions
diff --git a/comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser5.js b/comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser5.js
new file mode 100644
index 0000000000..a118d44641
--- /dev/null
+++ b/comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser5.js
@@ -0,0 +1,104 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Test suite for nsIMsgHeaderParser functions:
+ * parseDecodedHeader
+ * parseEncodedHeader
+ */
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+function equalArrays(arr1, arr2) {
+ Assert.equal(arr1.length, arr2.length);
+ for (let i = 0; i < arr1.length; i++) {
+ Assert.equal(arr1[i].name, arr2[i].name);
+ Assert.equal(arr1[i].email, arr2[i].email);
+ }
+}
+
+function run_test() {
+ // In this array, the sub arrays consist of the following elements:
+ // 0: input string
+ // 1: expected output from parseDecodedHeader
+ // 2: expected output from parseEncodedHeader
+ const checks = [
+ [
+ "abc@foo.invalid",
+ [{ name: "", email: "abc@foo.invalid" }],
+ [{ name: "", email: "abc@foo.invalid" }],
+ ],
+ [
+ "foo <ghj@foo.invalid>",
+ [{ name: "foo", email: "ghj@foo.invalid" }],
+ [{ name: "foo", email: "ghj@foo.invalid" }],
+ ],
+ [
+ "abc@foo.invalid, foo <ghj@foo.invalid>",
+ [
+ { name: "", email: "abc@foo.invalid" },
+ { name: "foo", email: "ghj@foo.invalid" },
+ ],
+ [
+ { name: "", email: "abc@foo.invalid" },
+ { name: "foo", email: "ghj@foo.invalid" },
+ ],
+ ],
+ // UTF-8 names
+ [
+ "foo\u00D0 bar <foo@bar.invalid>, \u00C3\u00B6foo <ghj@foo.invalid>",
+ [
+ { name: "foo\u00D0 bar", email: "foo@bar.invalid" },
+ { name: "\u00C3\u00B6foo", email: "ghj@foo.invalid" },
+ ],
+ [
+ { name: "foo\uFFFD bar", email: "foo@bar.invalid" },
+ { name: "\u00F6foo", email: "ghj@foo.invalid" },
+ ],
+ ],
+ // Bug 961564
+ [
+ "someone <>",
+ [{ name: "someone", email: "" }],
+ [{ name: "someone", email: "" }],
+ ],
+ // Bug 1423432: Encoded strings with null bytes,
+ // in base64 a single null byte can be encoded as AA== to AP==.
+ // parseEncodedHeader will remove the nullbyte.
+ [
+ '"null=?UTF-8?Q?=00?=byte" <nullbyte@example.com>',
+ [{ name: "null=?UTF-8?Q?=00?=byte", email: "nullbyte@example.com" }],
+ [{ name: "nullbyte", email: "nullbyte@example.com" }],
+ ],
+ [
+ '"null=?UTF-8?B?AA==?=byte" <nullbyte@example.com>',
+ [{ name: "null=?UTF-8?B?AA==?=byte", email: "nullbyte@example.com" }],
+ [{ name: "nullbyte", email: "nullbyte@example.com" }],
+ ],
+ ["", [], []],
+ [" \r\n\t", [], []],
+ [
+ // This used to cause memory read overruns.
+ '" "@a a;b',
+ [
+ { name: "", email: '" "@a a' },
+ { name: "b", email: "" },
+ ],
+ [
+ { name: "", email: "@a a" },
+ { name: "b", email: "" },
+ ],
+ ],
+ ];
+
+ for (let check of checks) {
+ equalArrays(
+ MailServices.headerParser.parseDecodedHeader(check[0]),
+ check[1]
+ );
+ equalArrays(
+ MailServices.headerParser.parseEncodedHeader(check[0], "UTF-8"),
+ check[2]
+ );
+ }
+}