v8/test/mjsunit/json-errors.js
Issack John a679edbb6e JSON.parse errors made user-friendly part 2
Part of the improve error messages initiative.

Based on a resource of JSON.parse() errors found at
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/JSON_bad_parse

added support for:
- 'Bad control character in string literal'
- 'Bad Unicode escape'

Previously JSON.parse('"a\bz"') would output:
SyntaxError: Unexpected token  in JSON at position 2
Now the output is:
SyntaxError: Bad control character in string literal in
JSON at position 2

Previously JSON.parse("[\"\\t\\u") would output:
SyntaxError: Unexpected end of JSON input
Now the output is:
SyntaxError: Bad Unicode escape in JSON at position 6

Bug: v8:6551
Change-Id: I3ba5450c41b8a388643a15bc58e4e3fc75855d13
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3652254
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Commit-Queue: Issack John <issackjohn@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#80642}
2022-05-19 15:07:03 +00:00

31 lines
845 B
JavaScript

// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
function TryParse(s, message) {
try {
JSON.parse(s);
assertUnreachable();
} catch(e) {
assertEquals(message, e.message);
}
}
var s = `{"a\\\\b `;
TryParse(s, "Unterminated string in JSON at position 7");
var s = `{"a\\\\\u03A9 `;
TryParse(s, "Unterminated string in JSON at position 7");
var s = `{"ab `;
TryParse(s, "Unterminated string in JSON at position 5");
var s = `{"a\u03A9 `;
TryParse(s, "Unterminated string in JSON at position 5");
var s = `{"a\nb":"b"}`;
TryParse(s, "Bad control character in string literal in JSON at position 3");
var s = `{"a\nb":"b\u03A9"}`;
TryParse(s, "Bad control character in string literal in JSON at position 3");