diff --git a/overlay/components/RuntimeErrorStack.js b/overlay/components/RuntimeErrorStack.js
index 58629877..983a60d5 100644
--- a/overlay/components/RuntimeErrorStack.js
+++ b/overlay/components/RuntimeErrorStack.js
@@ -33,14 +33,14 @@ function RuntimeErrorStack(document, root, props) {
errorStacks = ErrorStackParser.parse(props.error);
} catch (e) {
errorStacks = [];
- stackContainer.innerHTML = 'No stack trace is available for this error!';
+ stackContainer.textContent = 'No stack trace is available for this error!';
}
for (let i = 0; i < Math.min(errorStacks.length, 10); i += 1) {
const currentStack = errorStacks[i];
const functionName = document.createElement('code');
- functionName.innerHTML = ` ${currentStack.functionName || '(anonymous function)'}`;
+ functionName.textContent = `\u2003${currentStack.functionName || '(anonymous function)'}`;
functionName.style.color = theme.yellow;
functionName.style.fontFamily = [
'"SFMono-Regular"',
@@ -52,8 +52,8 @@ function RuntimeErrorStack(document, root, props) {
].join(', ');
const fileName = document.createElement('div');
- fileName.innerHTML =
- ' ' +
+ fileName.textContent =
+ '\u2003\u2003' +
utils.formatFilename(currentStack.fileName) +
':' +
currentStack.lineNumber +
diff --git a/test/overlay/components/RuntimeErrorStack.test.js b/test/overlay/components/RuntimeErrorStack.test.js
new file mode 100644
index 00000000..df606115
--- /dev/null
+++ b/test/overlay/components/RuntimeErrorStack.test.js
@@ -0,0 +1,22 @@
+/**
+ * @jest-environment jsdom
+ */
+/* eslint-env browser */
+
+const RuntimeErrorStack = require('../../../overlay/components/RuntimeErrorStack');
+
+describe('RuntimeErrorStack', () => {
+ it('renders stack frame values as text', () => {
+ const root = document.createElement('div');
+ const error = new Error('Failed');
+ error.stack =
+ 'Error: Failed\n at
(/tmp/file.js:1:2)';
+
+ RuntimeErrorStack(document, root, { error });
+
+ expect(root.querySelector('img')).toBeNull();
+ expect(root.querySelector('strong')).toBeNull();
+ expect(root.textContent).toContain('
');
+ expect(root.textContent).toContain('tmp/file.js:1:2');
+ });
+});