diff options
author | Casper Beyer <caspervonb@pm.me> | 2020-09-18 01:07:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-17 13:07:57 -0400 |
commit | a6f4559174c64066d45210b02f6a06aa2f67c2cd (patch) | |
tree | efacdaa4035b3b5eb78d2e6b4f6144ec92b1e01d | |
parent | c307e3e4be4e02de86103cd48d28f5ba3b18628d (diff) |
fix(cli/console): escape non printable characters in object entries (#7533)
-rw-r--r-- | cli/rt/02_console.js | 6 | ||||
-rw-r--r-- | cli/tests/unit/console_test.ts | 21 |
2 files changed, 20 insertions, 7 deletions
diff --git a/cli/rt/02_console.js b/cli/rt/02_console.js index b6f5bc74b..a5e6595b9 100644 --- a/cli/rt/02_console.js +++ b/cli/rt/02_console.js @@ -462,7 +462,11 @@ .replace(/\n/g, "\\n") .replace(/\r/g, "\\r") .replace(/\t/g, "\\t") - .replace(/\v/g, "\\v"); + .replace(/\v/g, "\\v") + .replace( + /[\x00-\x1f\x7f-\x9f]/g, + (c) => "\\x" + c.charCodeAt(0).toString(16).padStart(2, "0"), + ); } // Print strings when they are inside of arrays or objects with quotes diff --git a/cli/tests/unit/console_test.ts b/cli/tests/unit/console_test.ts index 42885957a..8b5079a59 100644 --- a/cli/tests/unit/console_test.ts +++ b/cli/tests/unit/console_test.ts @@ -94,16 +94,25 @@ unitTest(function consoleTestStringifyComplexObjects(): void { unitTest( function consoleTestStringifyComplexObjectsWithEscapedSequences(): void { assertEquals( - stringify(["foo\b", "foo\f", "foo\n", "foo\r", "foo\t", "foo\v"]), - `[ "foo\\b", "foo\\f", "foo\\n", "foo\\r", "foo\\t", "foo\\v" ]`, + stringify( + ["foo\b", "foo\f", "foo\n", "foo\r", "foo\t", "foo\v", "foo\0"], + ), + `[ + "foo\\b", "foo\\f", + "foo\\n", "foo\\r", + "foo\\t", "foo\\v", + "foo\\x00" +]`, ); assertEquals( - stringify({ "foo\b": "bar\n", "bar\r": "baz\t" }), - `{ foo\\b: "bar\\n", bar\\r: "baz\\t" }`, + stringify( + { "foo\b": "bar\n", "bar\r": "baz\t", "qux\0": "qux\0" }, + ), + `{ foo\\b: "bar\\n", bar\\r: "baz\\t", qux\\x00: "qux\\x00" }`, ); assertEquals( - stringify(new Set(["foo\n", "foo\r"])), - `Set { "foo\\n", "foo\\r" }`, + stringify(new Set(["foo\n", "foo\r", "foo\0"])), + `Set { "foo\\n", "foo\\r", "foo\\x00" }`, ); }, ); |