tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

value-string-escape-ascii.js (1757B)


      1 // Copyright (c) 2018 Ecma International.  All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 esid: sec-quotejsonstring
      6 description: >
      7    JSON.stringify property names and values containing ASCII
      8    characters that require escaping
      9 ---*/
     10 
     11 var char_to_json = {
     12  '"': '\\"',
     13  "\\": "\\\\",
     14  "\x00": "\\u0000",
     15  "\x01": "\\u0001",
     16  "\x02": "\\u0002",
     17  "\x03": "\\u0003",
     18  "\x04": "\\u0004",
     19  "\x05": "\\u0005",
     20  "\x06": "\\u0006",
     21  "\x07": "\\u0007",
     22  "\x08": "\\b",
     23  "\x09": "\\t",
     24  "\x0A": "\\n",
     25  "\x0B": "\\u000b",
     26  "\x0C": "\\f",
     27  "\x0D": "\\r",
     28  "\x0E": "\\u000e",
     29  "\x0F": "\\u000f",
     30  "\x10": "\\u0010",
     31  "\x11": "\\u0011",
     32  "\x12": "\\u0012",
     33  "\x13": "\\u0013",
     34  "\x14": "\\u0014",
     35  "\x15": "\\u0015",
     36  "\x16": "\\u0016",
     37  "\x17": "\\u0017",
     38  "\x18": "\\u0018",
     39  "\x19": "\\u0019",
     40  "\x1A": "\\u001a",
     41  "\x1B": "\\u001b",
     42  "\x1C": "\\u001c",
     43  "\x1D": "\\u001d",
     44  "\x1E": "\\u001e",
     45  "\x1F": "\\u001f"
     46 }
     47 
     48 var chars = Object.keys(char_to_json).join("");
     49 var chars_reversed = Object.keys(char_to_json).reverse().join("");
     50 var jsonChars = Object.values(char_to_json).join("");
     51 var jsonChars_reversed = Object.values(char_to_json).reverse().join("");
     52 var json = JSON.stringify({
     53  ["name" + chars + chars_reversed]: chars_reversed + chars + "value"
     54 });
     55 
     56 for (var char in char_to_json) {
     57  var count = json.split(char_to_json[char]).length - 1;
     58  assert.sameValue(count, 4,
     59    "Every ASCII 0x" + char.charCodeAt(0).toString(16) + " serializes to " + char_to_json[char]);
     60 }
     61 
     62 assert.sameValue(
     63  json,
     64  `{"${"name" + jsonChars + jsonChars_reversed}":"${jsonChars_reversed + jsonChars + "value"}"}`,
     65  "JSON.stringify(objectUsingControlCharacters)"
     66 );
     67 
     68 reportCompare(0, 0);