fix(encoding/toml): Stop TOML parser from detecting numbers in strings. (denoland/deno#7064)

Before this patch the TOML parser would incorrect treat the string
"base64data0xdamaged" in a declaration as a hex number because the
corresponding check triggers even when the "0x" is inside a double
quoted string literal as long as it is followed by at least one hex
character.
This commit is contained in:
danielwippermann 2020-08-17 23:48:15 +02:00 committed by denobot
parent 49996e8687
commit d75b9d10b1
3 changed files with 4 additions and 1 deletions

View File

@ -31,3 +31,4 @@ trimmed in raw strings.
withApostrophe = "What if it's not?"
withSemicolon = "const message = 'hello world';"
withHexNumberLiteral = "Prevent bug from stripping string here ->0xabcdef"

View File

@ -218,7 +218,7 @@ class Parser {
}
// If binary / octal / hex
const hex = /(0(?:x|o|b)[0-9a-f_]*)[^#]/gi.exec(dataString);
const hex = /^(0(?:x|o|b)[0-9a-f_]*)[^#]/gi.exec(dataString);
if (hex && hex[0]) {
return hex[0].trim();
}

View File

@ -29,6 +29,8 @@ Deno.test({
"whitespace\n is preserved.",
withApostrophe: "What if it's not?",
withSemicolon: `const message = 'hello world';`,
withHexNumberLiteral:
"Prevent bug from stripping string here ->0xabcdef",
},
};
const actual = parseFile(path.join(testFilesDir, "string.toml"));