Commit a73550bd authored by Jan Krems's avatar Jan Krems Committed by Commit Bot

Allow quotes inside of embedded sourceMappingURLs

The original implementation of matching was a RegExp on the source
which wasn't able to reliably distinguish between comments inside
of string literals and actual comments. For that reason, it had
a special rule to disallow quotes to remove false positives.

Original comment:
> Also, ['"] are excluded from allowed URLs to  avoid matches
> against sources that invoke evals with sourceURL.

After the code was moved into the scanner, that shouldn't be an
issue anymore - the scanner knows that this is a real comment and
isn't part of a string literal.

Allowing quotes enables a slightly smaller encoding of source maps,
specifically in the case where there are no sourceContents:
Non-base64 source maps can get away with effectively no encoding
overhead (they typically don't contain whitespace).

Change-Id: Iffa5df28d80656fa56e603e7c0e57aa1f44d0014
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2576801Reviewed-by: 's avatarMarja Hölttä <marja@chromium.org>
Auto-Submit: Jan Krems <jankrems@google.com>
Commit-Queue: Jan Krems <jankrems@google.com>
Cr-Commit-Position: refs/heads/master@{#71742}
parent 4c220552
......@@ -254,11 +254,6 @@ void Scanner::TryToParseSourceURLComment() {
Advance();
}
while (c0_ != kEndOfInput && !unibrow::IsLineTerminator(c0_)) {
// Disallowed characters.
if (c0_ == '"' || c0_ == '\'') {
value->Start();
return;
}
if (IsWhiteSpace(c0_)) {
break;
}
......
......@@ -23350,16 +23350,6 @@ TEST(ScriptSourceURLAndSourceMappingURL) {
"//# sourceURL=bar15\t.js \n"
"//# sourceMappingURL=bar16\t.js \n",
nullptr, nullptr);
SourceURLHelper(isolate,
"function foo() {}\n"
"//# sourceURL=bar17'.js \n"
"//# sourceMappingURL=bar18'.js \n",
nullptr, nullptr);
SourceURLHelper(isolate,
"function foo() {}\n"
"//# sourceURL=bar19\".js \n"
"//# sourceMappingURL=bar20\".js \n",
nullptr, nullptr);
// Not too much whitespace.
SourceURLHelper(isolate,
......@@ -23367,6 +23357,25 @@ TEST(ScriptSourceURLAndSourceMappingURL) {
"//# sourceURL= bar21.js \n"
"//# sourceMappingURL= bar22.js \n",
"bar21.js", "bar22.js");
// Comments in eval'd script should be ignored.
SourceURLHelper(isolate,
"function foo() {}\n"
"eval(\"\\\n//# sourceURL=bar23.js\");\n"
"eval(\"\\\n//# sourceMappingURL=bar24.js\");\n",
nullptr, nullptr);
SourceURLHelper(isolate,
"function foo() {}\n"
"eval('\\\n//# sourceURL=bar23.js');\n"
"eval('\\\n//# sourceMappingURL=bar24.js');\n",
nullptr, nullptr);
// Inline data: URLs are allowed.
SourceURLHelper(
isolate,
"function foo() {}\n"
"//# sourceMappingURL= data:application/json,{\"version\":3} \n",
nullptr, "data:application/json,{\"version\":3}");
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment