From 384d6792aa14f077a2a63f2bd402cacc1c949d3c Mon Sep 17 00:00:00 2001 From: Evan Wallace <evan.exe@gmail.com> Date: Sun, 7 Mar 2021 14:05:19 -0800 Subject: [PATCH] fix "+" characters in data URLs --- internal/bundler/bundler_loader_test.go | 16 ++++++++++++++++ internal/bundler/snapshots/snapshots_default.txt | 6 ++++++ internal/resolver/dataurl.go | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/internal/bundler/bundler_loader_test.go b/internal/bundler/bundler_loader_test.go index 3f2f1de7c1..5e9bb224b7 100644 --- a/internal/bundler/bundler_loader_test.go +++ b/internal/bundler/bundler_loader_test.go @@ -523,6 +523,22 @@ func TestLoaderDataURLTextJavaScriptCannotImport(t *testing.T) { }) } +// The "+" character must not be interpreted as a " " character +func TestLoaderDataURLTextJavaScriptPlusCharacter(t *testing.T) { + default_suite.expectBundled(t, bundled{ + files: map[string]string{ + "/entry.js": ` + import "data:text/javascript,console.log(1+2)"; + `, + }, + entryPaths: []string{"/entry.js"}, + options: config.Options{ + Mode: config.ModeBundle, + AbsOutputDir: "/out", + }, + }) +} + func TestLoaderDataURLApplicationJSON(t *testing.T) { default_suite.expectBundled(t, bundled{ files: map[string]string{ diff --git a/internal/bundler/snapshots/snapshots_default.txt b/internal/bundler/snapshots/snapshots_default.txt index f5413dbfa4..49f1eb2c92 100644 --- a/internal/bundler/snapshots/snapshots_default.txt +++ b/internal/bundler/snapshots/snapshots_default.txt @@ -1294,6 +1294,12 @@ console.log(123); // <data:text/javascript;charset=UTF-8;base64,Y29uc29sZS5sb2coMjM0KQ...> console.log(234); +================================================================================ +TestLoaderDataURLTextJavaScriptPlusCharacter +---------- /out/entry.js ---------- +// <data:text/javascript,console.log(1+2)> +console.log(1 + 2); + ================================================================================ TestLoaderDataURLUnknownMIME ---------- /out/entry.js ---------- diff --git a/internal/resolver/dataurl.go b/internal/resolver/dataurl.go index 1e788b59ba..7b0ac80cd9 100644 --- a/internal/resolver/dataurl.go +++ b/internal/resolver/dataurl.go @@ -68,7 +68,7 @@ func (parsed DataURL) DecodeData() (string, error) { } // Try to read percent-escaped data - content, err := url.QueryUnescape(parsed.data) + content, err := url.PathUnescape(parsed.data) if err != nil { return "", fmt.Errorf("Could not decode percent-escaped data: %s", err.Error()) }