From 89196614386bea96b80a846449ab114a142918ad Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Wed, 7 Jun 2017 12:52:35 -0700 Subject: [PATCH 1/3] Add failing test --- package.json | 2 +- test/bugs/3199-sanitization-escaping.js | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 test/bugs/3199-sanitization-escaping.js diff --git a/package.json b/package.json index d62bf41b..e84818b5 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "test": "npm run lint-errors && npm run just-test-in-node", "test-in-node": "npm run lint-errors && npm run just-test-in-node", "just-test": "karma start --config karma.conf.js", - "just-test-in-node": "mocha --recursive --compilers js:babel-core/register test/core test/components" + "just-test-in-node": "mocha --recursive --compilers js:babel-core/register test/core test/components test/bugs" }, "dependencies": { "babel-polyfill": "^6.23.0", diff --git a/test/bugs/3199-sanitization-escaping.js b/test/bugs/3199-sanitization-escaping.js new file mode 100644 index 00000000..5db9568e --- /dev/null +++ b/test/bugs/3199-sanitization-escaping.js @@ -0,0 +1,23 @@ +/* eslint-env mocha */ +import React from "react" +import expect from "expect" +import { render } from "enzyme" +import Markdown from "components/providers/markdown" + +describe("UI-3199: Sanitized Markdown causing code examples to be double escaped", function(){ + it("should single-escape quotes", function(){ + + let str = "" + + "This is a test: \n\n" + + " {\"abc\": \"def\"}\n" + + let props = { + source: str + } + + let el = render() + + expect(el.find("code").first().text()).toEqual("{\"abc\": \"def\"}\n") + expect(el.find("code").first().html()).toEqual("{"abc": "def"}\n") + }) +}) From 3189e6101b45cab2d977701a5adfb12c0223210e Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Wed, 7 Jun 2017 12:52:50 -0700 Subject: [PATCH 2/3] Fix eslint quotes rule --- .eslintrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc b/.eslintrc index de8159ce..09f6fe2e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -22,7 +22,7 @@ "rules": { "semi": [2, "never"], "strict": 0, - "quotes": 2, + "quotes": [2, "double", { "allowTemplateLiterals": true }], "no-unused-vars": 2, "no-multi-spaces": 1, "camelcase": 1, From a9d4f5efde0e3ce7bf2f78e5c9623b0f573984e0 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Wed, 7 Jun 2017 12:52:59 -0700 Subject: [PATCH 3/3] Add filter to un-double-escape quotation marks --- src/core/components/providers/markdown.jsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core/components/providers/markdown.jsx b/src/core/components/providers/markdown.jsx index 361e4580..d058d176 100644 --- a/src/core/components/providers/markdown.jsx +++ b/src/core/components/providers/markdown.jsx @@ -2,8 +2,15 @@ import React, { PropTypes } from "react" import Remarkable from "react-remarkable" import sanitize from "sanitize-html" +const sanitizeOptions = { + textFilter: function(text) { + return text + .replace(/"/g, "\"") + } +} + function Markdown({ source }) { - const sanitized = sanitize(source) + const sanitized = sanitize(source, sanitizeOptions) return