aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikon the Third <[email protected]>2021-03-02 16:16:09 +0100
committerGitHub <[email protected]>2021-03-02 17:16:09 +0200
commit7ad0625b8d1e35f0843040602d6cbf124786fc51 (patch)
tree2df40ba7d9279e25f3537cbb70de01cbef4a494b
parent8ec32eec44f46da2980d851e88523b8765e76bc8 (diff)
downloadbootstrap-7ad0625b8d1e35f0843040602d6cbf124786fc51.tar.xz
bootstrap-7ad0625b8d1e35f0843040602d6cbf124786fc51.zip
Adjust `SAFE_URL_PATTERN` regex for use with `test` method. (#33153)
The `test` method on regexes does not behave like `match` on strings for checks if the regex matches when the global modifier (g) is present. Also adds a unit test on tooltips for sanitizing the same template twice. Co-authored-by: XhmikosR <[email protected]>
-rw-r--r--js/src/tools/sanitizer.js2
-rw-r--r--js/tests/unit/tooltip.js20
2 files changed, 21 insertions, 1 deletions
diff --git a/js/src/tools/sanitizer.js b/js/src/tools/sanitizer.js
index 3878a4365..261db35d8 100644
--- a/js/src/tools/sanitizer.js
+++ b/js/src/tools/sanitizer.js
@@ -57,7 +57,7 @@ export const DefaultWhitelist = {
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
-const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi
+const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js
index 3c2423921..0f924c47d 100644
--- a/js/tests/unit/tooltip.js
+++ b/js/tests/unit/tooltip.js
@@ -1333,4 +1333,24 @@ $(function () {
assert.strictEqual(tooltip.hasClass('a b'), true)
assert.strictEqual(tooltip.hasClass('tooltip fade bs-tooltip-top show'), true)
})
+
+ QUnit.test('HTML content can be passed through sanitation multiple times', function (assert) {
+ assert.expect(2)
+
+ // Add the same tooltip twice, so the template will be sanitized twice as well.
+ for (var i = 0; i <= 1; i++) {
+ $('<a href="#" rel="tooltip" data-trigger="click" title="<img src=\'test.jpg\'>" />')
+ .appendTo('#qunit-fixture')
+ .bootstrapTooltip({
+ html: true
+ })
+ .bootstrapTooltip('show')
+ }
+
+ var tooltip1Image = $('.tooltip:first img')
+ var tooltip2Image = $('.tooltip:last img')
+
+ assert.strictEqual(tooltip1Image.attr('src'), 'test.jpg')
+ assert.strictEqual(tooltip2Image.attr('src'), 'test.jpg')
+ })
})