Check if charset is supported by TextDecoder

This commit is contained in:
nobody 2020-05-22 07:19:01 +02:00
parent 2f9247eb24
commit bad4187cd7
No known key found for this signature in database
GPG Key ID: 8F6DE3D614FCFD7A
3 changed files with 229 additions and 0 deletions

View File

@ -93,3 +93,225 @@ const BrowserType = {
'CHROMIUM': chrome.runtime.getURL("/").startsWith("chrome-extension"),
'FIREFOX': chrome.runtime.getURL("/").startsWith("moz-extension")
};
// Supported charsets for TextDecoder()
// https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder/TextDecoder
const EncodingTypes = {
'unicode-1-1-utf-8': true,
'utf-8': true,
'utf8': true,
'866': true,
'cp866': true,
'csibm866': true,
'ibm866': true,
'csisolatin2': true,
'iso-8859-2': true,
'iso-ir-101': true,
'iso8859-2': true,
'iso88592': true,
'iso_8859-2': true,
'iso_8859-2:1987': true,
'l2': true,
'latin2': true,
'csisolatin3': true,
'iso-8859-3': true,
'iso-ir-109': true,
'iso8859-3': true,
'iso88593': true,
'iso_8859-3': true,
'iso_8859-3:1988': true,
'l3': true,
'latin3': true,
'csisolatin4': true,
'iso-8859-4': true,
'iso-ir-110': true,
'iso8859-4': true,
'iso88594': true,
'iso_8859-4': true,
'iso_8859-4:1988': true,
'l4': true,
'latin4': true,
'csisolatincyrillic': true,
'cyrillic': true,
'iso-8859-5': true,
'iso-ir-144': true,
'iso88595': true,
'iso_8859-5': true,
'iso_8859-5:1988': true,
'arabic': true,
'asmo-708': true,
'csiso88596e': true,
'csiso88596i': true,
'csisolatinarabic': true,
'ecma-114': true,
'iso-8859-6': true,
'iso-8859-6-e': true,
'iso-8859-6-i': true,
'iso-ir-127': true,
'iso8859-6': true,
'iso88596': true,
'iso_8859-6': true,
'iso_8859-6:1987': true,
'csisolatingreek': true,
'ecma-118': true,
'elot_928': true,
'greek': true,
'greek8': true,
'iso-8859-7': true,
'iso-ir-126': true,
'iso8859-7': true,
'iso88597': true,
'iso_8859-7': true,
'iso_8859-7:1987': true,
'sun_eu_greek': true,
'csiso88598e': true,
'csisolatinhebrew': true,
'hebrew': true,
'iso-8859-8': true,
'iso-8859-8-e': true,
'iso-ir-138': true,
'iso8859-8': true,
'iso88598': true,
'iso_8859-8': true,
'iso_8859-8:1988': true,
'visual': true,
'csiso88598i': true,
'iso-8859-8-i': true,
'logical': true,
'csisolatin6': true,
'iso-8859-10': true,
'iso-ir-157': true,
'iso8859-10': true,
'iso885910': true,
'l6': true,
'latin6': true,
'iso-8859-13': true,
'iso8859-13': true,
'iso885913': true,
'iso-8859-14': true,
'iso8859-14': true,
'iso885914': true,
'csisolatin9': true,
'iso-8859-15': true,
'iso8859-15': true,
'iso885915': true,
'l9': true,
'latin9': true,
'iso-8859-16': true,
'cskoi8r': true,
'koi': true,
'koi8': true,
'koi8-r': true,
'koi8_r': true,
'koi8-u': true,
'csmacintosh': true,
'mac': true,
'macintosh': true,
'x-mac-roman': true,
'dos-874': true,
'iso-8859-11': true,
'iso8859-11': true,
'iso885911': true,
'tis-620': true,
'windows-874': true,
'cp1250': true,
'windows-1250': true,
'x-cp1250': true,
'cp1251': true,
'windows-1251': true,
'x-cp1251': true,
'ansi_x3.4-1968': true,
'ascii': true,
'cp1252': true,
'cp819': true,
'csisolatin1': true,
'ibm819': true,
'iso-8859-1': true,
'iso-ir-100': true,
'iso8859-1': true,
'iso88591': true,
'iso_8859-1': true,
'iso_8859-1:1987': true,
'l1': true,
'latin1': true,
'us-ascii': true,
'windows-1252': true,
'x-cp1252': true,
'cp1253': true,
'windows-1253': true,
'x-cp1253': true,
'cp1254': true,
'csisolatin5': true,
'iso-8859-9': true,
'iso-ir-148': true,
'iso8859-9': true,
'iso88599': true,
'iso_8859-9': true,
'iso_8859-9:1989': true,
'l5': true,
'latin5': true,
'windows-1254': true,
'x-cp1254': true,
'cp1255': true,
'windows-1255': true,
'x-cp1255': true,
'cp1256': true,
'windows-1256': true,
'x-cp1256': true,
'cp1257': true,
'windows-1257': true,
'x-cp1257': true,
'cp1258': true,
'windows-1258': true,
'x-cp1258': true,
'x-mac-cyrillic': true,
'x-mac-ukrainian': true,
'chinese': true,
'csgb2312': true,
'csiso58gb231280': true,
'gb2312': true,
'gb_2312': true,
'gb_2312-80': true,
'gbk': true,
'iso-ir-58': true,
'x-gbk': true,
'gb18030': true,
'hz-gb-2312': true,
'big5': true,
'big5-hkscs': true,
'cn-big5': true,
'csbig5': true,
'x-x-big5': true,
'cseucpkdfmtjapanese': true,
'euc-jp': true,
'x-euc-jp': true,
'csiso2022jp': true,
'iso-2022-jp': true,
'iso-2022-jp-2': true,
'iso-2022-jp': true,
'csshiftjis': true,
'ms_kanji': true,
'shift-jis': true,
'shift_jis': true,
'sjis': true,
'windows-31j': true,
'x-sjis': true,
'cseuckr': true,
'csksc56011987': true,
'euc-kr': true,
'iso-ir-149': true,
'korean': true,
'ks_c_5601-1987': true,
'ks_c_5601-1989': true,
'ksc5601': true,
'ksc_5601': true,
'windows-949': true,
'csiso2022kr': true,
'iso-2022-kr': true,
'utf-16be': true,
'utf-16': true,
'utf-16le': true,
'x-user-defined': true,
'iso-2022-cn': true,
'iso-2022-cn-ext': true
};

View File

@ -46,6 +46,12 @@ manipulateDOM._removeCrossOriginAndIntegrityAttr = function (details) {
asciiDecoder = new TextDecoder('ASCII');
encoder = new TextEncoder();
charset = /charset\s*=/.test(header.value) && header.value.replace(/^.*?charset\s*=\s*/, '').replace(/["']?/g, '');
// Check if charset is supported by TextDecoder()
if(EncodingTypes[charset.toString().toLowerCase()] == undefined){
charset = false;
}
isFirstData = true;
filter = browser.webRequest.filterResponseData(details.requestId);

View File

@ -25,6 +25,7 @@
<ul>
<li>Fixed: Identify correct charset if its in quotation marks</li>
<li>Mapping: Removed duplicates</li>
<li>DOM manipulation: Check if charset is supported by TextDecoder()</li>
</ul>
<div class="topic-label">