Don't allow escaped surrogated identifiers + introduce ascii_identifiers
Don't use 2 characters for surrogates in identifiers because there is
support for the \u{} syntax when escaped identifiers were introduced.
Also catch eof errors while reading identifier names
Introduce ascii_identifiers:
By setting ascii_identifiers to undefined (default value),
ascii_identifiers will print identifiers using the same setting as
ascii_only within the limits of the ecmascript 6 grammar.
ascii_identifiers accept true and false, allowing identifiers to be
printed under different settings than strings with the ascii_only setting.
This commit is contained in:
committed by
Richard van Velzen
parent
110a1ac885
commit
27d3669800
36
test/mocha/eof.js
Normal file
36
test/mocha/eof.js
Normal file
@@ -0,0 +1,36 @@
|
||||
var assert = require("assert");
|
||||
var uglify = require("../../");
|
||||
|
||||
describe("EOF", function() {
|
||||
it("Should test code for at least throwing syntax error when incomplete", function() {
|
||||
var error = function(e) {
|
||||
return e instanceof uglify.JS_Parse_Error &&
|
||||
/^SyntaxError: /.test(e.message);
|
||||
}
|
||||
var parse = function(test) {
|
||||
return function() {
|
||||
uglify.parse(test);
|
||||
}
|
||||
}
|
||||
// Chops off 1 char at a time until limit or start of string is reached
|
||||
// The passed code must still be valid when unchopped
|
||||
var test_eol = function(input, chopLimit) {
|
||||
if (chopLimit === undefined) {
|
||||
chopLimit = input.length - 1;
|
||||
}
|
||||
|
||||
assert.doesNotThrow(parse(input), "Expected valid code for \n" + input);
|
||||
|
||||
for (var i = input.length - 1; chopLimit > 0; chopLimit--, i--) {
|
||||
var code = input.substr(0, i);
|
||||
assert.throws(parse(code), error, code);
|
||||
}
|
||||
}
|
||||
|
||||
test_eol("var \\u1234", 7); // Incomplete identifier
|
||||
test_eol("'Incomplete string'");
|
||||
test_eol("/Unterminated regex/");
|
||||
test_eol("` Unterminated template string`");
|
||||
test_eol("/* Unfinishing multiline comment */");
|
||||
});
|
||||
});
|
||||
@@ -52,7 +52,11 @@ describe("Unicode", function() {
|
||||
var tests = [
|
||||
'var \\u{0} = "foo";',
|
||||
'var \\u{10ffff} = "bar";',
|
||||
'var \\u000a = "what\'s up";'
|
||||
'var \\u000a = "what\'s up";',
|
||||
// Valid ID_Start, but using up 2 escaped characters and not fitting in IdentifierStart
|
||||
'var \\ud800\\udc00 = "Hello";',
|
||||
'var \\udbff\\udfff = "Unicode";', // Same as previous test
|
||||
'var \\ud800\udc01 = "Weird unicode";', // Same as above, but mixed escaped with unicode chars
|
||||
];
|
||||
|
||||
var exec = function(test) {
|
||||
|
||||
Reference in New Issue
Block a user