Skip to content
This repository was archived by the owner on Sep 5, 2024. It is now read-only.

Commit 0b72ab9

Browse files
authored
fix(tooltip): properly interpolate tooltip text to prevent possible XSS (#10159)
1 parent 491d139 commit 0b72ab9

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

src/components/tooltip/tooltip.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,9 @@ function MdTooltipDirective($timeout, $window, $$rAF, $document, $interpolate,
104104

105105
function addAriaLabel(override) {
106106
if (override || !parent.attr('aria-label')) {
107-
var rawText = override || element.text().trim();
108-
var interpolatedText = $interpolate(rawText)(parent.scope());
107+
// Only interpolate the text from the HTML element because otherwise the custom text
108+
// could be interpolated twice and cause XSS violations.
109+
var interpolatedText = override || $interpolate(element.text().trim())(parent.scope);
109110
parent.attr('aria-label', interpolatedText);
110111
}
111112
}

src/components/tooltip/tooltip.spec.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,26 @@ describe('MdTooltip Component', function() {
102102

103103
expect(element.attr('aria-label')).toBe('test 2');
104104
});
105+
106+
it('should not interpolate interpolated values', function() {
107+
buildTooltip(
108+
'<md-button>' +
109+
'<md-tooltip>{{ testModel.ariaTest }}</md-tooltip>' +
110+
'</md-button>'
111+
);
112+
113+
$rootScope.$apply(function() {
114+
$rootScope.testModel.ariaTest = 'test {{1+1}}';
115+
});
116+
117+
expect(element.attr('aria-label')).toBe('test {{1+1}}');
118+
119+
$rootScope.$apply(function() {
120+
$rootScope.testModel.ariaTest = 'test {{1+1336}}';
121+
});
122+
123+
expect(element.attr('aria-label')).toBe('test {{1+1336}}');
124+
});
105125

106126
it('should not set parent to items with no pointer events',
107127
inject(function($window) {

0 commit comments

Comments
 (0)