Revision d911bf37
Added by koszko over 1 year ago
background/stream_filter.js | ||
---|---|---|
35 | 35 |
function validate_encoding(charset) |
36 | 36 |
{ |
37 | 37 |
try { |
38 |
new TextDecoder(); |
|
38 |
new TextDecoder(charset);
|
|
39 | 39 |
return charset; |
40 | 40 |
} catch(e) { |
41 | 41 |
return undefined; |
... | ... | |
44 | 44 |
|
45 | 45 |
function is_content_type_header(header) |
46 | 46 |
{ |
47 |
header.name.toLowerCase().trim() === "content-type"; |
|
47 |
return header.name.toLowerCase().trim() === "content-type";
|
|
48 | 48 |
} |
49 | 49 |
|
50 | 50 |
const charset_reg = /;\s*charset\s*=\s*([\w-]+)/i; |
... | ... | |
55 | 55 |
|
56 | 56 |
for (const header of headers.filter(is_content_type_header)) { |
57 | 57 |
const match = charset_reg.exec(header.value); |
58 |
if (!properties.detected_charset && validate_encoding(match[1])) |
|
58 |
if (match && !properties.detected_charset && |
|
59 |
validate_encoding(match[1])) |
|
59 | 60 |
properties.detected_charset = match[1]; |
60 | 61 |
|
61 | 62 |
if (/html/i.test(header.value)) |
... | ... | |
105 | 106 |
function create_decoder(properties, data) |
106 | 107 |
{ |
107 | 108 |
let charset = charset_from_BOM(data) || properties.detected_charset; |
108 |
if (!charset && data.indexOf(0) !== -1) { |
|
109 |
|
|
110 |
if (charset) |
|
111 |
return new TextDecoder(charset); |
|
112 |
|
|
113 |
if (data.indexOf(0) !== -1) { |
|
109 | 114 |
console.warn("Haketilo: zeroes in bytestream, probable cached encoding mismatch. Trying to decode it as UTF-16.", |
110 | 115 |
properties); |
111 | 116 |
return new TextDecoder("utf-16be"); |
Also available in: Unified diff
fix encoding detection in StreamFilter