Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Update: Report '\08' and '\09' in no-octal-escape (fixes #12080) (#12526
)
  • Loading branch information
mdjermanovic authored and platinumazure committed Nov 13, 2019
1 parent 45aa6a3 commit 448ff1e
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 7 deletions.
2 changes: 1 addition & 1 deletion lib/rules/no-octal-escape.js
Expand Up @@ -38,7 +38,7 @@ module.exports = {

// \0 represents a valid NULL character if it isn't followed by a digit.
const match = node.raw.match(
/^(?:[^\\]|\\.)*?\\([0-3][0-7]{1,2}|[4-7][0-7]|[1-7])/u
/^(?:[^\\]|\\.)*?\\([0-3][0-7]{1,2}|[4-7][0-7]|0(?=[89])|[1-7])/su
);

if (match) {
Expand Down
86 changes: 80 additions & 6 deletions tests/lib/rules/no-octal-escape.js
Expand Up @@ -25,33 +25,107 @@ ruleTester.run("no-octal-escape", rule, {
"var foo = \"foo \\\\251 bar\";",
"var foo = /([abc]) \\1/g;",
"var foo = '\\0';",
"'\\0'",
"'\\8'",
"'\\9'",
"'\\0 '",
"' \\0'",
"'a\\0'",
"'\\0a'",
"'a\\8a'",
"'\\0\\8'",
"'\\8\\0'",
"'\\80'",
"'\\81'",
"'\\\\'",
"'\\\\0'",
"'\\\\08'",
"'\\\\1'",
"'\\\\01'",
"'\\08'",
"'\\09'"
"'\\\\12'",
"'\\\\\\0'",
"'\\\\\\8'",
"'\\0\\\\'",
"'0'",
"'1'",
"'8'",
"'01'",
"'08'",
"'80'",
"'12'",
"'\\a'",
"'\\n'"
],
invalid: [

// Test full message
{ code: "var foo = \"foo \\01 bar\";", errors: [{ message: "Don't use octal: '\\01'. Use '\\u....' instead.", type: "Literal" }] },

{ code: "var foo = \"foo \\000 bar\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "000" }, type: "Literal" }] },
{ code: "var foo = \"foo \\377 bar\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "377" }, type: "Literal" }] },
{ code: "var foo = \"foo \\378 bar\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "37" }, type: "Literal" }] },
{ code: "var foo = \"foo \\37a bar\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "37" }, type: "Literal" }] },
{ code: "var foo = \"foo \\381 bar\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "3" }, type: "Literal" }] },
{ code: "var foo = \"foo \\3a1 bar\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "3" }, type: "Literal" }] },
{ code: "var foo = \"foo \\251 bar\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "251" }, type: "Literal" }] },
{ code: "var foo = \"\\751\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "75" }, type: "Literal" }] },
{ code: "var foo = \"foo \\258 bar\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "25" }, type: "Literal" }] },
{ code: "var foo = \"foo \\25a bar\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "25" }, type: "Literal" }] },
{ code: "var foo = \"\\3s51\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "3" }, type: "Literal" }] },
{ code: "var foo = \"\\77\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "77" }, type: "Literal" }] },
{ code: "var foo = \"\\78\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "7" }, type: "Literal" }] },
{ code: "var foo = \"\\5a\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "5" }, type: "Literal" }] },
{ code: "var foo = \"\\751\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "75" }, type: "Literal" }] },
{ code: "var foo = \"foo \\400 bar\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "40" }, type: "Literal" }] },

{ code: "var foo = \"\\t\\1\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "var foo = \"\\\\\\751\";", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "75" }, type: "Literal" }] },

{ code: "'\\0\\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'\\0 \\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'\\0\\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\0 \\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\08\\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'\\08\\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\0a\\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'\\0a\\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\0\\08'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "0" }, type: "Literal" }] },

{ code: "'\\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'\\2'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "2" }, type: "Literal" }] },
{ code: "'\\7'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "7" }, type: "Literal" }] },
{ code: "'\\00'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "00" }, type: "Literal" }] },
{ code: "'\\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\02'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "02" }, type: "Literal" }] },
{ code: "'\\07'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "07" }, type: "Literal" }] },
{ code: "'\\08'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "0" }, type: "Literal" }] },
{ code: "'\\09'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "0" }, type: "Literal" }] },
{ code: "'\\10'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "10" }, type: "Literal" }] },
{ code: "'\\12'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "12" }, type: "Literal" }] },
{ code: "' \\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'\\1 '", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'a\\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'\\1a'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'a\\1a'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "' \\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\01 '", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'a\\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\01a'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'a\\01a'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'a\\08a'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "0" }, type: "Literal" }] },
{ code: "'\\n\\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'\\n\\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\n\\08'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "0" }, type: "Literal" }] },
{ code: "'\\\\\\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },
{ code: "'\\\\\\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\\\\\08'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "0" }, type: "Literal" }] },

// Multiline string
{ code: "'\\\n\\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] },

// Only the first one is reported
{ code: "'\\01\\02'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\02\\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "02" }, type: "Literal" }] },
{ code: "'\\01\\2'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "01" }, type: "Literal" }] },
{ code: "'\\2\\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "2" }, type: "Literal" }] }
{ code: "'\\2\\01'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "2" }, type: "Literal" }] },
{ code: "'\\08\\1'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "0" }, type: "Literal" }] },
{ code: "'foo \\1 bar \\2'", errors: [{ messageId: "octalEscapeSequence", data: { sequence: "1" }, type: "Literal" }] }
]
});

1 comment on commit 448ff1e

@zhanyi233
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ERROR SyntaxError: Invalid regular expression flags
E:\xxx\node_modules\eslint\lib\rules\no-octal-escape.js:41
/^(?:[^\\]|\.)*?\([0-3][0-7]{1,2}|[4-7][0-7]|0(?=[89])|[1-7])/su
^

Please sign in to comment.