dompurify 2.4.5 → 2.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,7 +10,7 @@ It's also very simple to use and get started with. DOMPurify was [started in Feb
10
10
 
11
11
  DOMPurify is written in JavaScript and works in all modern browsers (Safari (10+), Opera (15+), Internet Explorer (10+), Edge, Firefox and Chrome - as well as almost anything else using Blink or WebKit). It doesn't break on MSIE6 or other legacy browsers. It either uses [a fall-back](#what-about-older-browsers-like-msie8) or simply does nothing.
12
12
 
13
- **Note that DOMPurify v2.4.5 is the final version supporting MSIE. For important security updates compatible with MSIE, please use the 2.x branch.**
13
+ **Note that DOMPurify v2.4.6 is the latest version supporting MSIE. For important security updates compatible with MSIE, please use the 2.x branch.**
14
14
 
15
15
  Our automated tests cover [19 different browsers](https://github.com/cure53/DOMPurify/blob/main/test/karma.custom-launchers.config.js#L5) right now, more to come. We also cover Node.js v14.x, v16.x, v17.x and v18.x, running DOMPurify on [jsdom](https://github.com/jsdom/jsdom). Older Node versions are known to work as well, but hey... no guarantees.
16
16
 
@@ -1,4 +1,4 @@
1
- /*! @license DOMPurify 2.4.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.5/LICENSE */
1
+ /*! @license DOMPurify 2.4.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.6/LICENSE */
2
2
 
3
3
  'use strict';
4
4
 
@@ -153,7 +153,9 @@ function unconstruct(func) {
153
153
  /* Add properties to a lookup table */
154
154
 
155
155
  function addToSet(set, array, transformCaseFunc) {
156
- transformCaseFunc = transformCaseFunc ? transformCaseFunc : stringToLowerCase;
156
+ var _transformCaseFunc;
157
+
158
+ transformCaseFunc = (_transformCaseFunc = transformCaseFunc) !== null && _transformCaseFunc !== void 0 ? _transformCaseFunc : stringToLowerCase;
157
159
 
158
160
  if (setPrototypeOf) {
159
161
  // Make 'in' and truthy checks like Boolean(set.constructor)
@@ -324,7 +326,7 @@ function createDOMPurify() {
324
326
  */
325
327
 
326
328
 
327
- DOMPurify.version = '2.4.5';
329
+ DOMPurify.version = '2.4.6';
328
330
  /**
329
331
  * Array of elements that DOMPurify removed during sanitation.
330
332
  * Empty if nothing was removed.
@@ -390,7 +392,7 @@ function createDOMPurify() {
390
392
  * Expose whether this browser supports running the full DOMPurify.
391
393
  */
392
394
 
393
- DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;
395
+ DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined && documentMode !== 9;
394
396
  var MUSTACHE_EXPR$1 = MUSTACHE_EXPR,
395
397
  ERB_EXPR$1 = ERB_EXPR,
396
398
  TMPLIT_EXPR$1 = TMPLIT_EXPR,
@@ -1124,8 +1126,10 @@ function createDOMPurify() {
1124
1126
 
1125
1127
  return true;
1126
1128
  }
1129
+ /* Make sure that older browsers don't get fallback-tag mXSS */
1130
+
1127
1131
 
1128
- if ((tagName === 'noscript' || tagName === 'noembed') && regExpTest(/<\/no(script|embed)/i, currentNode.innerHTML)) {
1132
+ if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) {
1129
1133
  _forceRemove(currentNode);
1130
1134
 
1131
1135
  return true;
@@ -1187,9 +1191,9 @@ function createDOMPurify() {
1187
1191
  }
1188
1192
  /* Check value is safe. First, is attr inert? If so, is safe */
1189
1193
 
1190
- } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if (!value) ; else {
1194
+ } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if (value) {
1191
1195
  return false;
1192
- }
1196
+ } else ;
1193
1197
 
1194
1198
  return true;
1195
1199
  };
@@ -1316,12 +1320,16 @@ function createDOMPurify() {
1316
1320
  if (namespaceURI) ; else {
1317
1321
  switch (trustedTypes.getAttributeType(lcTag, lcName)) {
1318
1322
  case 'TrustedHTML':
1319
- value = trustedTypesPolicy.createHTML(value);
1320
- break;
1323
+ {
1324
+ value = trustedTypesPolicy.createHTML(value);
1325
+ break;
1326
+ }
1321
1327
 
1322
1328
  case 'TrustedScriptURL':
1323
- value = trustedTypesPolicy.createScriptURL(value);
1324
- break;
1329
+ {
1330
+ value = trustedTypesPolicy.createScriptURL(value);
1331
+ break;
1332
+ }
1325
1333
  }
1326
1334
  }
1327
1335
  }
@@ -1415,15 +1423,14 @@ function createDOMPurify() {
1415
1423
 
1416
1424
 
1417
1425
  if (typeof dirty !== 'string' && !_isNode(dirty)) {
1418
- // eslint-disable-next-line no-negated-condition
1419
- if (typeof dirty.toString !== 'function') {
1420
- throw typeErrorCreate('toString is not a function');
1421
- } else {
1426
+ if (typeof dirty.toString === 'function') {
1422
1427
  dirty = dirty.toString();
1423
1428
 
1424
1429
  if (typeof dirty !== 'string') {
1425
1430
  throw typeErrorCreate('dirty is not a string, aborting');
1426
1431
  }
1432
+ } else {
1433
+ throw typeErrorCreate('toString is not a function');
1427
1434
  }
1428
1435
  }
1429
1436
  /* Check we can run. Otherwise fall back or ignore */