From 4c93a7067fc1c4968161644f018d7f5c71299fd8 Mon Sep 17 00:00:00 2001 From: Ben van Enckevort Date: Sat, 14 Jan 2017 09:33:34 +0000 Subject: [PATCH] fixed bug where an odd number of backslashes escaping a quote followed by a number confuses 'wrapNumbers', resulting in invalid json --- extension/src/json-viewer/content-extractor.js | 6 +++++- tests/test.backslash.json | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/extension/src/json-viewer/content-extractor.js b/extension/src/json-viewer/content-extractor.js index 7923dad3..90db387b 100644 --- a/extension/src/json-viewer/content-extractor.js +++ b/extension/src/json-viewer/content-extractor.js @@ -71,6 +71,7 @@ function wrapNumbers(text) { var buffer = ""; var numberBuffer = ""; var isInString = false; + var charIsEscaped = false; var isInNumber = false; var previous = ""; var beforePrevious = ""; @@ -78,7 +79,7 @@ function wrapNumbers(text) { for (var i = 0, len = text.length; i < len; i++) { var char = text[i]; - if (char == '"' && (previous != '\\' || (previous == '\\' && beforePrevious == '\\'))) { + if (char == '"' && !charIsEscaped) { isInString = !isInString; } @@ -99,6 +100,9 @@ function wrapNumbers(text) { numberBuffer = ""; } + // this applies to the _next_ character - the one used in the next iteration + charIsEscaped = (char == '\\') ? !charIsEscaped : false + if (isInNumber) { numberBuffer += char; diff --git a/tests/test.backslash.json b/tests/test.backslash.json index 64a59e7b..0fdd9af3 100644 --- a/tests/test.backslash.json +++ b/tests/test.backslash.json @@ -1,4 +1,5 @@ { + "triple-backslash": "\\\"99\\\"", "path": "C:\\foobar\\", "number": 123, "foo": "bar"