Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 63cd05b

Browse filesBrowse files
sapicsaddaleax
authored andcommitted
src: fix ParseEncoding
"utf-16LE" was parsed "UNKNOWN", this fixes to "UCS2" "utf-buffer" was parsed "BUFFER", this fixes to "UNKNOWN" "utf-16leNOT" was parsed "UCS2", this fixes to "UNKNOWN" PR-URL: #33957 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 6ee800f commit 63cd05b
Copy full SHA for 63cd05b

File tree

Expand file treeCollapse file tree

3 files changed

+65
-47
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

3 files changed

+65
-47
lines changed
Open diff view settings
Collapse file

‎src/api/encoding.cc‎

Copy file name to clipboardExpand all lines: src/api/encoding.cc
+58-41Lines changed: 58 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -14,74 +14,91 @@ enum encoding ParseEncoding(const char* encoding,
1414
enum encoding default_encoding) {
1515
switch (encoding[0]) {
1616
case 'u':
17+
case 'U':
1718
// utf8, utf16le
1819
if (encoding[1] == 't' && encoding[2] == 'f') {
1920
// Skip `-`
20-
encoding += encoding[3] == '-' ? 4 : 3;
21-
if (encoding[0] == '8' && encoding[1] == '\0')
21+
const size_t skip = encoding[3] == '-' ? 4 : 3;
22+
if (encoding[skip] == '8' && encoding[skip + 1] == '\0')
2223
return UTF8;
23-
if (strncmp(encoding, "16le", 4) == 0)
24+
if (strncmp(encoding + skip, "16le", 5) == 0)
2425
return UCS2;
25-
2626
// ucs2
2727
} else if (encoding[1] == 'c' && encoding[2] == 's') {
28-
encoding += encoding[3] == '-' ? 4 : 3;
29-
if (encoding[0] == '2' && encoding[1] == '\0')
28+
const size_t skip = encoding[3] == '-' ? 4 : 3;
29+
if (encoding[skip] == '2' && encoding[skip + 1] == '\0')
3030
return UCS2;
3131
}
32+
if (StringEqualNoCase(encoding, "utf8"))
33+
return UTF8;
34+
if (StringEqualNoCase(encoding, "utf-8"))
35+
return UTF8;
36+
if (StringEqualNoCase(encoding, "ucs2"))
37+
return UCS2;
38+
if (StringEqualNoCase(encoding, "ucs-2"))
39+
return UCS2;
40+
if (StringEqualNoCase(encoding, "utf16le"))
41+
return UCS2;
42+
if (StringEqualNoCase(encoding, "utf-16le"))
43+
return UCS2;
3244
break;
45+
3346
case 'l':
47+
case 'L':
3448
// latin1
3549
if (encoding[1] == 'a') {
36-
if (strncmp(encoding + 2, "tin1", 4) == 0)
50+
if (strncmp(encoding + 2, "tin1", 5) == 0)
3751
return LATIN1;
3852
}
53+
if (StringEqualNoCase(encoding, "latin1"))
54+
return LATIN1;
3955
break;
56+
4057
case 'b':
41-
// binary
58+
case 'B':
59+
// binary is a deprecated alias of latin1
4260
if (encoding[1] == 'i') {
43-
if (strncmp(encoding + 2, "nary", 4) == 0)
61+
if (strncmp(encoding + 2, "nary", 5) == 0)
4462
return LATIN1;
45-
4663
// buffer
4764
} else if (encoding[1] == 'u') {
48-
if (strncmp(encoding + 2, "ffer", 4) == 0)
65+
if (strncmp(encoding + 2, "ffer", 5) == 0)
4966
return BUFFER;
67+
// base64
68+
} else if (encoding[1] == 'a') {
69+
if (strncmp(encoding + 2, "se64", 5) == 0)
70+
return BASE64;
5071
}
72+
if (StringEqualNoCase(encoding, "binary"))
73+
return LATIN1; // BINARY is a deprecated alias of LATIN1.
74+
if (StringEqualNoCase(encoding, "buffer"))
75+
return BUFFER;
76+
if (StringEqualNoCase(encoding, "base64"))
77+
return BASE64;
5178
break;
52-
case '\0':
53-
return default_encoding;
54-
default:
79+
80+
case 'a':
81+
case 'A':
82+
// ascii
83+
if (encoding[1] == 's') {
84+
if (strncmp(encoding + 2, "cii", 4) == 0)
85+
return ASCII;
86+
}
87+
if (StringEqualNoCase(encoding, "ascii"))
88+
return ASCII;
5589
break;
56-
}
5790

58-
if (StringEqualNoCase(encoding, "utf8")) {
59-
return UTF8;
60-
} else if (StringEqualNoCase(encoding, "utf-8")) {
61-
return UTF8;
62-
} else if (StringEqualNoCase(encoding, "ascii")) {
63-
return ASCII;
64-
} else if (StringEqualNoCase(encoding, "base64")) {
65-
return BASE64;
66-
} else if (StringEqualNoCase(encoding, "ucs2")) {
67-
return UCS2;
68-
} else if (StringEqualNoCase(encoding, "ucs-2")) {
69-
return UCS2;
70-
} else if (StringEqualNoCase(encoding, "utf16le")) {
71-
return UCS2;
72-
} else if (StringEqualNoCase(encoding, "utf-16le")) {
73-
return UCS2;
74-
} else if (StringEqualNoCase(encoding, "latin1")) {
75-
return LATIN1;
76-
} else if (StringEqualNoCase(encoding, "binary")) {
77-
return LATIN1; // BINARY is a deprecated alias of LATIN1.
78-
} else if (StringEqualNoCase(encoding, "buffer")) {
79-
return BUFFER;
80-
} else if (StringEqualNoCase(encoding, "hex")) {
81-
return HEX;
82-
} else {
83-
return default_encoding;
91+
case 'h':
92+
case 'H':
93+
// hex
94+
if (encoding[1] == 'e')
95+
if (encoding[2] == 'x' && encoding[3] == '\0')
96+
return HEX;
97+
if (StringEqualNoCase(encoding, "hex"))
98+
return HEX;
99+
break;
84100
}
101+
return default_encoding;
85102
}
86103

87104

Collapse file

‎src/util-inl.h‎

Copy file name to clipboardExpand all lines: src/util-inl.h
+4-6Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -299,12 +299,10 @@ std::string ToUpper(const std::string& in) {
299299
}
300300

301301
bool StringEqualNoCase(const char* a, const char* b) {
302-
do {
303-
if (*a == '\0')
304-
return *b == '\0';
305-
if (*b == '\0')
306-
return *a == '\0';
307-
} while (ToLower(*a++) == ToLower(*b++));
302+
while (ToLower(*a) == ToLower(*b++)) {
303+
if (*a++ == '\0')
304+
return true;
305+
}
308306
return false;
309307
}
310308

Collapse file

‎test/addons/parse-encoding/test.js‎

Copy file name to clipboardExpand all lines: test/addons/parse-encoding/test.js
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ assert.strictEqual(parseEncoding('hex'), 'HEX');
1414
assert.strictEqual(parseEncoding('latin1'), 'LATIN1');
1515
assert.strictEqual(parseEncoding('ucs2'), 'UCS2');
1616
assert.strictEqual(parseEncoding('utf8'), 'UTF8');
17+
assert.strictEqual(parseEncoding('utf-16LE'), 'UCS2');
18+
assert.strictEqual(parseEncoding('utf-buffer'), 'UNKNOWN');
19+
assert.strictEqual(parseEncoding('utf-16leNOT'), 'UNKNOWN');
1720

1821
assert.strictEqual(parseEncoding('linary'), 'UNKNOWN');
1922
assert.strictEqual(parseEncoding('luffer'), 'UNKNOWN');

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.