diff --git a/src/Language/CSharp.purs b/src/Language/CSharp.purs index 55867e36..cd981023 100644 --- a/src/Language/CSharp.purs +++ b/src/Language/CSharp.purs @@ -67,7 +67,6 @@ isPartCharacter c = Just ConnectorPunctuation -> true Just NonSpacingMark -> true Just SpacingCombiningMark -> true - Just Format -> true _ -> isStartCharacter c renderNullableToCSharp :: IRType -> Doc String diff --git a/src/Language/Java.purs b/src/Language/Java.purs index 8bd65e2d..193bc882 100644 --- a/src/Language/Java.purs +++ b/src/Language/Java.purs @@ -2,16 +2,16 @@ module Language.Java ( renderer ) where -import Doc (Doc, Renderer, blank, combineNames, forEachProperty_, forEachTopLevel_, getForSingleOrMultipleTopLevels, getTypeNameForUnion, indent, line, lookupClassName, lookupUnionName, noForbidNamer, renderRenderItems, simpleNamer, transformPropertyNames, unionIsNotSimpleNullable, unionNameIntercalated) -import IRGraph (IRClassData(..), IRType(..), IRUnionRep, forUnion_, isUnionMember, nullableFromUnion, removeNullFromUnion, unionHasArray, unionHasClass, unionHasMap) import Prelude -import Data.Char.Unicode (GeneralCategory(..), generalCategory, isSpace) +import Data.Char.Unicode (isAscii, isDigit, isLetter) import Data.Foldable (for_) import Data.Map (Map) import Data.Map as M import Data.Maybe (Maybe(..)) -import Data.String.Util (camelCase, capitalize, isLetterOrLetterNumber, legalizeCharacters, startWithLetter, stringEscape) +import Data.String.Util (camelCase, capitalize, legalizeCharacters, startWithLetter, stringEscape) +import Doc (Doc, Renderer, blank, combineNames, forEachProperty_, forEachTopLevel_, getForSingleOrMultipleTopLevels, getTypeNameForUnion, indent, line, lookupClassName, lookupUnionName, noForbidNamer, renderRenderItems, simpleNamer, transformPropertyNames, unionIsNotSimpleNullable, unionNameIntercalated) +import IRGraph (IRClassData(..), IRType(..), IRUnionRep, forUnion_, isUnionMember, nullableFromUnion, removeNullFromUnion, unionHasArray, unionHasClass, unionHasMap) forbiddenNames :: Array String forbiddenNames = @@ -29,7 +29,7 @@ forbiddenNames = , "char", "final", "interface", "static", "void" , "class", "finally", "long", "strictfp", "volatile" , "const", "float", "native", "super", "while" - , "null" + , "null", "false", "true" ] renderer :: Renderer @@ -57,20 +57,11 @@ nameForClass (IRClassData { names }) = javaNameStyle true $ combineNames names isStartCharacter :: Char -> Boolean isStartCharacter c = - case generalCategory c of - Just CurrencySymbol -> true - Just ConnectorPunctuation -> true - _ -> isLetterOrLetterNumber c + (isAscii c && isLetter c) || c == '_' isPartCharacter :: Char -> Boolean isPartCharacter c = - case generalCategory c of - Just DecimalNumber -> true - Just SpacingCombiningMark -> true - Just NonSpacingMark -> true - Just Format -> true - Just Control -> not $ isSpace c - _ -> isStartCharacter c + isStartCharacter c || (isAscii c && isDigit c) legalize :: String -> String legalize = legalizeCharacters isPartCharacter diff --git a/test/generate-json.py b/test/generate-json.py index a1babcbc..2c7afeda 100755 --- a/test/generate-json.py +++ b/test/generate-json.py @@ -2,6 +2,8 @@ import argparse import random +import json +import sys with open('/usr/share/dict/words') as f: words = f.read().splitlines() @@ -26,9 +28,18 @@ def main(): parser.add_argument('--array-elements', nargs=1, type=int, default=[3]) parser.add_argument('--object-size', nargs=1, type=int, default=None) parser.add_argument('--class-count', nargs=1, type=int, default=None) + parser.add_argument('--with-string-list', nargs=1, default=None) args = parser.parse_args() - if args.class_count: + if args.with_string_list: + with open(args.with_string_list[0]) as f: + strings = [x[:-1] for x in f.readlines()] + obj = {} + for s in strings: + obj[s] = s + obj["dontMakeAMap"] = True + json.dump(obj, sys.stdout) + elif args.class_count: print('{') for i in range(args.class_count[0] - 1): print(' "class%d":' % i) diff --git a/test/inputs/json/priority/blns-object.json b/test/inputs/json/priority/blns-object.json new file mode 100644 index 00000000..cff06b1f --- /dev/null +++ b/test/inputs/json/priority/blns-object.json @@ -0,0 +1 @@ +{"": "", "\u00ad\u0600\u0601\u0602\u0603\u0604\u0605\u061c\u06dd\u070f\u180e\u200b\u200c\u200d\u200e\u200f\u202a\u202b\u202c\u202d\u202e\u2060\u2061\u2062\u2063\u2064\u2066\u2067\u2068\u2069\u206a\u206b\u206c\u206d\u206e\u206f\ufeff\ufff9\ufffa\ufffb\ud804\udcbd\ud82f\udca0\ud82f\udca1\ud82f\udca2\ud82f\udca3\ud834\udd73\ud834\udd74\ud834\udd75\ud834\udd76\ud834\udd77\ud834\udd78\ud834\udd79\ud834\udd7a\udb40\udc01\udb40\udc20\udb40\udc21\udb40\udc22\udb40\udc23\udb40\udc24\udb40\udc25\udb40\udc26\udb40\udc27\udb40\udc28\udb40\udc29\udb40\udc2a\udb40\udc2b\udb40\udc2c\udb40\udc2d\udb40\udc2e\udb40\udc2f\udb40\udc30\udb40\udc31\udb40\udc32\udb40\udc33\udb40\udc34\udb40\udc35\udb40\udc36\udb40\udc37\udb40\udc38\udb40\udc39\udb40\udc3a\udb40\udc3b\udb40\udc3c\udb40\udc3d\udb40\udc3e\udb40\udc3f\udb40\udc40\udb40\udc41\udb40\udc42\udb40\udc43\udb40\udc44\udb40\udc45\udb40\udc46\udb40\udc47\udb40\udc48\udb40\udc49\udb40\udc4a\udb40\udc4b\udb40\udc4c\udb40\udc4d\udb40\udc4e\udb40\udc4f\udb40\udc50\udb40\udc51\udb40\udc52\udb40\udc53\udb40\udc54\udb40\udc55\udb40\udc56\udb40\udc57\udb40\udc58\udb40\udc59\udb40\udc5a\udb40\udc5b\udb40\udc5c\udb40\udc5d\udb40\udc5e\udb40\udc5f\udb40\udc60\udb40\udc61\udb40\udc62\udb40\udc63\udb40\udc64\udb40\udc65\udb40\udc66\udb40\udc67\udb40\udc68\udb40\udc69\udb40\udc6a\udb40\udc6b\udb40\udc6c\udb40\udc6d\udb40\udc6e\udb40\udc6f\udb40\udc70\udb40\udc71\udb40\udc72\udb40\udc73\udb40\udc74\udb40\udc75\udb40\udc76\udb40\udc77\udb40\udc78\udb40\udc79\udb40\udc7a\udb40\udc7b\udb40\udc7c\udb40\udc7d\udb40\udc7e\udb40\udc7f": "\u00ad\u0600\u0601\u0602\u0603\u0604\u0605\u061c\u06dd\u070f\u180e\u200b\u200c\u200d\u200e\u200f\u202a\u202b\u202c\u202d\u202e\u2060\u2061\u2062\u2063\u2064\u2066\u2067\u2068\u2069\u206a\u206b\u206c\u206d\u206e\u206f\ufeff\ufff9\ufffa\ufffb\ud804\udcbd\ud82f\udca0\ud82f\udca1\ud82f\udca2\ud82f\udca3\ud834\udd73\ud834\udd74\ud834\udd75\ud834\udd76\ud834\udd77\ud834\udd78\ud834\udd79\ud834\udd7a\udb40\udc01\udb40\udc20\udb40\udc21\udb40\udc22\udb40\udc23\udb40\udc24\udb40\udc25\udb40\udc26\udb40\udc27\udb40\udc28\udb40\udc29\udb40\udc2a\udb40\udc2b\udb40\udc2c\udb40\udc2d\udb40\udc2e\udb40\udc2f\udb40\udc30\udb40\udc31\udb40\udc32\udb40\udc33\udb40\udc34\udb40\udc35\udb40\udc36\udb40\udc37\udb40\udc38\udb40\udc39\udb40\udc3a\udb40\udc3b\udb40\udc3c\udb40\udc3d\udb40\udc3e\udb40\udc3f\udb40\udc40\udb40\udc41\udb40\udc42\udb40\udc43\udb40\udc44\udb40\udc45\udb40\udc46\udb40\udc47\udb40\udc48\udb40\udc49\udb40\udc4a\udb40\udc4b\udb40\udc4c\udb40\udc4d\udb40\udc4e\udb40\udc4f\udb40\udc50\udb40\udc51\udb40\udc52\udb40\udc53\udb40\udc54\udb40\udc55\udb40\udc56\udb40\udc57\udb40\udc58\udb40\udc59\udb40\udc5a\udb40\udc5b\udb40\udc5c\udb40\udc5d\udb40\udc5e\udb40\udc5f\udb40\udc60\udb40\udc61\udb40\udc62\udb40\udc63\udb40\udc64\udb40\udc65\udb40\udc66\udb40\udc67\udb40\udc68\udb40\udc69\udb40\udc6a\udb40\udc6b\udb40\udc6c\udb40\udc6d\udb40\udc6e\udb40\udc6f\udb40\udc70\udb40\udc71\udb40\udc72\udb40\udc73\udb40\udc74\udb40\udc75\udb40\udc76\udb40\udc77\udb40\udc78\udb40\udc79\udb40\udc7a\udb40\udc7b\udb40\udc7c\udb40\udc7d\udb40\udc7e\udb40\udc7f", "": "", "\u24af\u24a3\u24a0 \u24ac\u24b0\u24a4\u249e\u24a6 \u249d\u24ad\u24aa\u24b2\u24a9 \u24a1\u24aa\u24b3 \u24a5\u24b0\u24a8\u24ab\u24ae \u24aa\u24b1\u24a0\u24ad \u24af\u24a3\u24a0 \u24a7\u249c\u24b5\u24b4 \u249f\u24aa\u24a2": "\u24af\u24a3\u24a0 \u24ac\u24b0\u24a4\u249e\u24a6 \u249d\u24ad\u24aa\u24b2\u24a9 \u24a1\u24aa\u24b3 \u24a5\u24b0\u24a8\u24ab\u24ae \u24aa\u24b1\u24a0\u24ad \u24af\u24a3\u24a0 \u24a7\u249c\u24b5\u24b4 \u249f\u24aa\u24a2", "classic": "classic", "": "", "`ls -al /`": "`ls -al /`", "1;DROP TABLE users": "1;DROP TABLE users", "undef": "undef", "\u202a\u202atest\u202a": "\u202a\u202atest\u202a", "\ud835\udc7b\ud835\udc89\ud835\udc86 \ud835\udc92\ud835\udc96\ud835\udc8a\ud835\udc84\ud835\udc8c \ud835\udc83\ud835\udc93\ud835\udc90\ud835\udc98\ud835\udc8f \ud835\udc87\ud835\udc90\ud835\udc99 \ud835\udc8b\ud835\udc96\ud835\udc8e\ud835\udc91\ud835\udc94 \ud835\udc90\ud835\udc97\ud835\udc86\ud835\udc93 \ud835\udc95\ud835\udc89\ud835\udc86 \ud835\udc8d\ud835\udc82\ud835\udc9b\ud835\udc9a \ud835\udc85\ud835\udc90\ud835\udc88": "\ud835\udc7b\ud835\udc89\ud835\udc86 \ud835\udc92\ud835\udc96\ud835\udc8a\ud835\udc84\ud835\udc8c \ud835\udc83\ud835\udc93\ud835\udc90\ud835\udc98\ud835\udc8f \ud835\udc87\ud835\udc90\ud835\udc99 \ud835\udc8b\ud835\udc96\ud835\udc8e\ud835\udc91\ud835\udc94 \ud835\udc90\ud835\udc97\ud835\udc86\ud835\udc93 \ud835\udc95\ud835\udc89\ud835\udc86 \ud835\udc8d\ud835\udc82\ud835\udc9b\ud835\udc9a \ud835\udc85\ud835\udc90\ud835\udc88", "1 000 000.00": "1 000 000.00", "Dick Van Dyke": "Dick Van Dyke", "#\tScript Injection": "#\tScript Injection", "0": "0", "# U+0000, U+000A, or U+000D (NUL, LF, CR).": "# U+0000, U+000A, or U+000D (NUL, LF, CR).", "0,00": "0,00", "# Non-whitespace C1 controls: U+0080 through U+0084 and U+0086 through U+009F.": "# Non-whitespace C1 controls: U+0080 through U+0084 and U+0086 through U+009F.", "# and U+200B (ZERO WIDTH SPACE), which are in the C categories but are often": "# and U+200B (ZERO WIDTH SPACE), which are in the C categories but are often", "\">DEF": "ABC
DEF", "0,0,0": "0,0,0", ";alert(123);": ";alert(123);", "test": "test", "": "", "test": "test", "javascript:alert(1);": "javascript:alert(1);", "": "", "False": "False", "test": "test", "-,": "-,", "-.": "-.", "test": "test", "1#SNAN": "1#SNAN", "-0": "-0", "\"`'>": "\"`'>", "\"`'>": "\"`'>", "0,0/0,0": "0,0/0,0", "Kernel.exit(1)": "Kernel.exit(1)", "0x0": "0x0", "ABC
DEF": "ABC
DEF", "\u2066test\u2067": "\u2066test\u2067", "test": "test", "ABC
DEF": "ABC
DEF", "test": "test", "test": "test", "1.0/0.0": "1.0/0.0", "#\tSQL Injection": "#\tSQL Injection", "\\\";alert('XSS');//": "\\\";alert('XSS');//", "Z\u032e\u031e\u0320\u0359\u0354\u0345\u1e00\u0317\u031e\u0348\u033b\u0317\u1e36\u0359\u034e\u032f\u0339\u031e\u0353G\u033bO\u032d\u0317\u032e": "Z\u032e\u031e\u0320\u0359\u0354\u0345\u1e00\u0317\u031e\u0348\u033b\u0317\u1e36\u0359\u034e\u032f\u0339\u031e\u0353G\u033bO\u032d\u0317\u032e", "RomansInSussex.co.uk": "RomansInSussex.co.uk", "\" autofocus onkeyup=\"javascript:alert(123)": "\" autofocus onkeyup=\"javascript:alert(123)", "1#QNAN": "1#QNAN", "True": "True", "{0}": "{0}", "\"`'>": "\"`'>", "test": "test", " ": " ", "#\tStrings which contain Emoji; should be the same behavior as two-byte characters, but not always": "#\tStrings which contain Emoji; should be the same behavior as two-byte characters, but not always", "ABC
DEF": "ABC
DEF", "<<< %s(un='%s') = %u": "<<< %s(un='%s') = %u", "$ENV{'HOME'}": "$ENV{'HOME'}", "# fonts, and have a number of special behaviors": "# fonts, and have a number of special behaviors", "Penistone Community Church": "Penistone Community Church", "\u023a": "\u023a", "\u023e": "\u023e", "\ud83d\udebe \ud83c\udd92 \ud83c\udd93 \ud83c\udd95 \ud83c\udd96 \ud83c\udd97 \ud83c\udd99 \ud83c\udfe7": "\ud83d\udebe \ud83c\udd92 \ud83c\udd93 \ud83c\udd95 \ud83c\udd96 \ud83c\udd97 \ud83c\udd99 \ud83c\udfe7", "LPT2": "LPT2", "LPT3": "LPT3", "#\tHuman injection": "#\tHuman injection", "test": "test", "INF": "INF", "#\tTwo-Byte Characters": "#\tTwo-Byte Characters", "#\tStrings which can call system commands within Ruby/Rails applications": "#\tStrings which can call system commands within Ruby/Rails applications", "#\tKnown CVEs and Vulnerabilities": "#\tKnown CVEs and Vulnerabilities", "Arsenal canal": "Arsenal canal", "-Infinity": "-Infinity", "\u0153\u2211\u00b4\u00ae\u2020\u00a5\u00a8\u02c6\u00f8\u03c0\u201c\u2018": "\u0153\u2211\u00b4\u00ae\u2020\u00a5\u00a8\u02c6\u00f8\u03c0\u201c\u2018", "": "", "!@#$%^&*()`~": "!@#$%^&*()`~", "#\tCharacters which increase in length (2 to 3 bytes) when lowercased": "#\tCharacters which increase in length (2 to 3 bytes) when lowercased", "\"`'>": "\"`'>", "\ufffe": "\ufffe", ",./;'[]\\-=": ",./;'[]\\-=", "\u30d1\u30fc\u30c6\u30a3\u30fc\u3078\u884c\u304b\u306a\u3044\u304b": "\u30d1\u30fc\u30c6\u30a3\u30fc\u3078\u884c\u304b\u306a\u3044\u304b", "\u05d4\u05b8\u05d9\u05b0\u05ea\u05b8\u05d4test\u0627\u0644\u0635\u0641\u062d\u0627\u062a \u0627\u0644\u062a\u0651\u062d\u0648\u0644": "\u05d4\u05b8\u05d9\u05b0\u05ea\u05b8\u05d4test\u0627\u0644\u0635\u0641\u062d\u0627\u062a \u0627\u0644\u062a\u0651\u062d\u0648\u0644", "\u2080\u2081\u2082": "\u2080\u2081\u2082", "\u202btest\u202b": "\u202btest\u202b", "": "", "#\tStrings that test for known vulnerabilities": "#\tStrings that test for known vulnerabilities", "( \u0361\u00b0 \u035c\u0296 \u0361\u00b0)": "( \u0361\u00b0 \u035c\u0296 \u0361\u00b0)", "' OR '1'='1": "' OR '1'='1", "ABC
DEF": "ABC
DEF", "1/2": "1/2", "1/0": "1/0", "`\"'>": "`\"'>", "\uff9f\uff65\u273f\u30fe\u2572(\uff61\u25d5\u203f\u25d5\uff61)\u2571\u273f\uff65\uff9f": "\uff9f\uff65\u273f\u30fe\u2572(\uff61\u25d5\u203f\u25d5\uff61)\u2571\u273f\uff65\uff9f", "": "", "": "", "#\tUnicode font": "#\tUnicode font", "": "", "00\u02d9\u0196$-": "00\u02d9\u0196$-", "AUX": "AUX", "": "", "1E02": "1E02", "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6": "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6", "\ud83d\udc69\ud83c\udffd": "\ud83d\udc69\ud83c\udffd", "test": "test", "$HOME": "$HOME", "test": "test", "#\tString which can reveal system files when parsed by a badly configured XML parser": "#\tString which can reveal system files when parsed by a badly configured XML parser", "ABC
DEF": "ABC
DEF", "ABC
DEF": "ABC
DEF", "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8 \ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2\ud83c\uddf8": "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8 \ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2\ud83c\uddf8", "\ud835\udd7f\ud835\udd8d\ud835\udd8a \ud835\udd96\ud835\udd9a\ud835\udd8e\ud835\udd88\ud835\udd90 \ud835\udd87\ud835\udd97\ud835\udd94\ud835\udd9c\ud835\udd93 \ud835\udd8b\ud835\udd94\ud835\udd9d \ud835\udd8f\ud835\udd9a\ud835\udd92\ud835\udd95\ud835\udd98 \ud835\udd94\ud835\udd9b\ud835\udd8a\ud835\udd97 \ud835\udd99\ud835\udd8d\ud835\udd8a \ud835\udd91\ud835\udd86\ud835\udd9f\ud835\udd9e \ud835\udd89\ud835\udd94\ud835\udd8c": "\ud835\udd7f\ud835\udd8d\ud835\udd8a \ud835\udd96\ud835\udd9a\ud835\udd8e\ud835\udd88\ud835\udd90 \ud835\udd87\ud835\udd97\ud835\udd94\ud835\udd9c\ud835\udd93 \ud835\udd8b\ud835\udd94\ud835\udd9d \ud835\udd8f\ud835\udd9a\ud835\udd92\ud835\udd95\ud835\udd98 \ud835\udd94\ud835\udd9b\ud835\udd8a\ud835\udd97 \ud835\udd99\ud835\udd8d\ud835\udd8a \ud835\udd91\ud835\udd86\ud835\udd9f\ud835\udd9e \ud835\udd89\ud835\udd94\ud835\udd8c", "test": "test", "0..0": "0..0", "": "", "\"`'>": "\"`'>", "test": "test", "test": "test", "\"`'>": "\"`'>", "1": "1", "1E2": "1E2", "": "", "ript>alert(123)ript>": "ript>alert(123)ript>", "ABC
DEF": "ABC
DEF", "\u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47 \u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47 \u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47": "\u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47 \u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47 \u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47", "": "", "Super Bowl XXX": "Super Bowl XXX", "": "", "123456789012345678901234567890123456789": "123456789012345678901234567890123456789", " Copy me": " Copy me", "javascript:alert(1);": "javascript:alert(1);", "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2": "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2", "test": "test", "ABC
DEF": "ABC
DEF", "\u0080\u0081\u0082\u0083\u0084\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f": "\u0080\u0081\u0082\u0083\u0084\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f", "test": "test", "": "", "test": "test", "": "", "Jimmy Clitheroe": "Jimmy Clitheroe", "-1E02": "-1E02", "#\tChanging length when lowercased": "#\tChanging length when lowercased", "": "", "\u00b8\u02db\u00c7\u25ca\u0131\u02dc\u00c2\u00af\u02d8\u00bf": "\u00b8\u02db\u00c7\u25ca\u0131\u02dc\u00c2\u00af\u02d8\u00bf", "\";alert(123);t=\"": "\";alert(123);t=\"", "": "", "\"`'>": "\"`'>", "\u0321\u0353\u031e\u0345I\u0317\u0318\u0326\u035dn\u0347\u0347\u0359v\u032e\u032bok\u0332\u032b\u0319\u0348i\u0316\u0359\u032d\u0339\u0320\u031en\u0321\u033b\u032e\u0323\u033ag\u0332\u0348\u0359\u032d\u0359\u032c\u034e \u0330t\u0354\u0326h\u031e\u0332e\u0322\u0324 \u034d\u032c\u0332\u0356f\u0334\u0318\u0355\u0323\u00e8\u0356\u1eb9\u0325\u0329l\u0356\u0354\u035ai\u0353\u035a\u0326\u0360n\u0356\u034d\u0317\u0353\u0333\u032eg\u034d \u0328o\u035a\u032a\u0361f\u0318\u0323\u032c \u0316\u0318\u0356\u031f\u0359\u032ec\u0489\u0354\u032b\u0356\u0353\u0347\u0356\u0345h\u0335\u0324\u0323\u035a\u0354\u00e1\u0317\u033c\u0355\u0345o\u033c\u0323\u0325s\u0331\u0348\u033a\u0316\u0326\u033b\u0362.\u031b\u0316\u031e\u0320\u032b\u0330": "\u0321\u0353\u031e\u0345I\u0317\u0318\u0326\u035dn\u0347\u0347\u0359v\u032e\u032bok\u0332\u032b\u0319\u0348i\u0316\u0359\u032d\u0339\u0320\u031en\u0321\u033b\u032e\u0323\u033ag\u0332\u0348\u0359\u032d\u0359\u032c\u034e \u0330t\u0354\u0326h\u031e\u0332e\u0322\u0324 \u034d\u032c\u0332\u0356f\u0334\u0318\u0355\u0323\u00e8\u0356\u1eb9\u0325\u0329l\u0356\u0354\u035ai\u0353\u035a\u0326\u0360n\u0356\u034d\u0317\u0353\u0333\u032eg\u034d \u0328o\u035a\u032a\u0361f\u0318\u0323\u032c \u0316\u0318\u0356\u031f\u0359\u032ec\u0489\u0354\u032b\u0356\u0353\u0347\u0356\u0345h\u0335\u0324\u0323\u035a\u0354\u00e1\u0317\u033c\u0355\u0345o\u033c\u0323\u0325s\u0331\u0348\u033a\u0316\u0326\u033b\u0362.\u031b\u0316\u031e\u0320\u032b\u0330", "#\tInnocuous strings which may be blocked by profanity filters (https://en.wikipedia.org/wiki/Scunthorpe_problem)": "#\tInnocuous strings which may be blocked by profanity filters (https://en.wikipedia.org/wiki/Scunthorpe_problem)", "#\tMSDOS/Windows Special Filenames": "#\tMSDOS/Windows Special Filenames", "<>?:\"{}|_+": "<>?:\"{}|_+", "TRUE": "TRUE", "\ufeff": "\ufeff", "1'000,00": "1'000,00", "PRN": "PRN", ",": ",", "\u00a1\u2122\u00a3\u00a2\u221e\u00a7\u00b6\u2022\u00aa\u00ba\u2013\u2260": "\u00a1\u2122\u00a3\u00a2\u221e\u00a7\u00b6\u2022\u00aa\u00ba\u2013\u2260", "\u548c\u88fd\u6f22\u8a9e": "\u548c\u88fd\u6f22\u8a9e", "#\tStrings which contain bold/italic/etc. versions of normal characters": "#\tStrings which contain bold/italic/etc. versions of normal characters", "Dr. Herman I. Libshitz": "Dr. Herman I. Libshitz", "\u0152\u201e\u00b4\u2030\u02c7\u00c1\u00a8\u02c6\u00d8\u220f\u201d\u2019": "\u0152\u201e\u00b4\u2030\u02c7\u00c1\u00a8\u02c6\u00d8\u220f\u201d\u2019", "#\tStrings which consists of Japanese-style emoticons which are popular on the web": "#\tStrings which consists of Japanese-style emoticons which are popular on the web", "%x('ls -al /')": "%x('ls -al /')", "%d": "%d", "#\tStrings which contain unicode subscripts/superscripts; can cause rendering issues": "#\tStrings which contain unicode subscripts/superscripts; can cause rendering issues", "\"`'>": "\"`'>", "": "", "1'000'000.00": "1'000'000.00", "false": "false", "\\": "\\", "%s": "%s", "1.00": "1.00", "": "", "nil": "nil", "`\u2044\u20ac\u2039\u203a\ufb01\ufb02\u2021\u00b0\u00b7\u201a\u2014\u00b1": "`\u2044\u20ac\u2039\u203a\ufb01\ufb02\u2021\u00b0\u00b7\u201a\u2014\u00b1", "\uff40\uff68(\u00b4\u2200\uff40\u2229": "\uff40\uff68(\u00b4\u2200\uff40\u2229", "`\"'>": "`\"'>", "test": "test", "(\u256f\u00b0\u25a1\u00b0\uff09\u256f\ufe35 \u253b\u2501\u253b)": "(\u256f\u00b0\u25a1\u00b0\uff09\u256f\ufe35 \u253b\u2501\u253b)", "\"`'>": "\"`'>", "ABC
DEF": "ABC
DEF", "\u7530\u4e2d\u3055\u3093\u306b\u3042\u3052\u3066\u4e0b\u3055\u3044": "\u7530\u4e2d\u3055\u3093\u306b\u3042\u3052\u3066\u4e0b\u3055\u3044", "": "\"`'>", "\"`'>": "\"`'>", "'\"'": "'\"'", "0.0/0.0": "0.0/0.0", "#\tCommand Injection (Ruby)": "#\tCommand Injection (Ruby)", "test": "test", "'": "'", "#\tStrings which crashed iMessage in various versions of iOS": "#\tStrings which crashed iMessage in various versions of iOS", "\"`'>": "\"`'>", "": "", "test": "test", "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669": "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669", "": "", "-1": "-1", "#\tStrings which contain common unicode symbols (e.g. smart quotes)": "#\tStrings which contain common unicode symbols (e.g. smart quotes)", "None": "None", "../../../../../../../../../../../etc/passwd%00": "../../../../../../../../../../../etc/passwd%00", "#\tUnwanted Interpolation": "#\tUnwanted Interpolation", "#\tStrings which can be accidentally expanded into different strings if evaluated in the wrong context, e.g. used as a printf format string or via Perl or shell eval. Might expose sensitive data from the program doing the interpolation, or might just represent the wrong string.": "#\tStrings which can be accidentally expanded into different strings if evaluated in the wrong context, e.g. used as a printf format string or via Perl or shell eval. Might expose sensitive data from the program doing the interpolation, or might just represent the wrong string.", "(null)": "(null)", "`\"'>": "`\"'>", "#\tStrings which contain misplaced quotation marks; can cause encoding errors": "#\tStrings which contain misplaced quotation marks; can cause encoding errors", "\"`'>": "\"`'>", "#\tStrings which may cause human to reinterpret worldview": "#\tStrings which may cause human to reinterpret worldview", "": "", "perl -e 'print \"\";' > out": "perl -e 'print \"\";' > out", "javascript:alert(1);": "javascript:alert(1);", "Lightwater Country Park": "Lightwater Country Park", "# The next two lines may appear to be blank or mojibake in some viewers.": "# The next two lines may appear to be blank or mojibake in some viewers.", "+0": "+0", "';alert(123);t='": "';alert(123);t='", "#\tUnicode Numbers": "#\tUnicode Numbers", "test": "test", "": "", "../../../../../../../../../../../etc/hosts": "../../../../../../../../../../../etc/hosts", "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999": "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", "The quic\b\b\b\b\b\bk brown fo\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007x... [Beeeep]": "The quic\b\b\b\b\b\bk brown fo\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007x... [Beeeep]", "ABC
DEF": "ABC
DEF", "\ufdfd": "\ufdfd", "' OR 1=1 -- 1": "' OR 1=1 -- 1", "\ufdfa": "\ufdfa", "": "", "1 000 000,00": "1 000 000,00", "#\tUnicode Symbols": "#\tUnicode Symbols", "test": "test", "\"": "\"", "": "", "0.00": "0.00", "NUL": "NUL", "\"`'>": "\"`'>", "#\tStrings which contain text that should be rendered RTL if possible (e.g. Arabic, Hebrew)": "#\tStrings which contain text that should be rendered RTL if possible (e.g. Arabic, Hebrew)", "": "", "\"`'>": "\"`'>", "$(touch /tmp/blns.fail)": "$(touch /tmp/blns.fail)", "test": "test", "# The next line may appear to be blank, mojibake, or dingbats in some viewers.": "# The next line may appear to be blank, mojibake, or dingbats in some viewers.", "`touch /tmp/blns.fail`": "`touch /tmp/blns.fail`", "<": "<", "\"`'>": "\"`'>", "# Regional Indicator Symbols": "# Regional Indicator Symbols", "\ud83d\ude0d": "\ud83d\ude0d", "test": "test", "