From 6c8c7b8448b433e689a818a7e524393e780e9567 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Sat, 23 Mar 2024 17:44:43 +0900 Subject: [PATCH] fix: dont resolve imports with malformed URI --- .../vite/src/node/plugins/importAnalysis.ts | 5 +---- playground/assets/__tests__/assets.spec.ts | 4 ++-- playground/assets/asset/percent%.png | Bin 0 -> 4850 bytes playground/assets/index.html | 16 +++++++++++++--- ...10-\346\270\254\350\251\246-white space.png" | Bin ...210-\346\270\254\350\251\246-white space.js" | 0 6 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 playground/assets/asset/percent%.png rename "playground/assets/nested/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space%.png" => "playground/assets/nested/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space.png" (100%) rename "playground/assets/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space%.js" => "playground/assets/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space.js" (100%) diff --git a/packages/vite/src/node/plugins/importAnalysis.ts b/packages/vite/src/node/plugins/importAnalysis.ts index 4c940aa109b00a..6d758e04cd807c 100644 --- a/packages/vite/src/node/plugins/importAnalysis.ts +++ b/packages/vite/src/node/plugins/importAnalysis.ts @@ -40,7 +40,6 @@ import { joinUrlSegments, moduleListContains, normalizePath, - partialEncodeURIPath, prettifyUrl, removeImportQuery, removeTimestampQuery, @@ -594,9 +593,7 @@ export function importAnalysisPlugin(config: ResolvedConfig): Plugin { rewriteDone = true } if (!rewriteDone) { - const rewrittenUrl = JSON.stringify( - ssr ? url : partialEncodeURIPath(url), - ) + const rewrittenUrl = JSON.stringify(url) const s = isDynamicImport ? start : start - 1 const e = isDynamicImport ? end : end + 1 str().overwrite(s, e, rewrittenUrl, { diff --git a/playground/assets/__tests__/assets.spec.ts b/playground/assets/__tests__/assets.spec.ts index 6fb337a9484bb6..fb00f0ac2041f8 100644 --- a/playground/assets/__tests__/assets.spec.ts +++ b/playground/assets/__tests__/assets.spec.ts @@ -369,11 +369,11 @@ test('?url import on css', async () => { describe('unicode url', () => { test('from js import', async () => { - const src = readFile('テスト-測試-white space%.js') + const src = readFile('テスト-測試-white space.js') expect(await page.textContent('.unicode-url')).toMatch( isBuild ? `data:text/javascript;base64,${Buffer.from(src).toString('base64')}` - : encodeURI(`/foo/bar/テスト-測試-white space%.js`), + : encodeURI(`/foo/bar/テスト-測試-white space.js`), ) }) }) diff --git a/playground/assets/asset/percent%.png b/playground/assets/asset/percent%.png new file mode 100644 index 0000000000000000000000000000000000000000..b5e16ddc80b8ab399097853f034fe1b3e473a305 GIT binary patch literal 4850 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 x?fEC$My!5#?I1l|nU~_TK6y{6^P>R5DBz*7CSS url references

Unicode URL

- +

Filename including single quote

@@ -143,11 +143,17 @@

Filename including single quote

+

Filename including percent

+
+ + +
+

encodeURI for the address

@@ -442,12 +448,16 @@

assets in noscript

import fooUrl from './foo.js?url' text('.url', fooUrl) - import unicodeUrl from './テスト-測試-white space%.js?url' + import unicodeUrl from './テスト-測試-white space.js?url' text('.unicode-url', unicodeUrl) import filenameIncludingSingleQuoteUrl from "./nested/with-single'quote.png" text('.filename-including-single-quote', filenameIncludingSingleQuoteUrl) + // TODO: is not supported yet (https://github.com/vitejs/vite/pull/16243) + // import percentUrl from './asset/percent%25.png?url' + // text('.percent-url', percentUrl) + import cssUrl from './css/icons.css?url' text('.url-css', cssUrl) diff --git "a/playground/assets/nested/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space%.png" "b/playground/assets/nested/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space.png" similarity index 100% rename from "playground/assets/nested/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space%.png" rename to "playground/assets/nested/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space.png" diff --git "a/playground/assets/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space%.js" "b/playground/assets/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space.js" similarity index 100% rename from "playground/assets/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space%.js" rename to "playground/assets/\343\203\206\343\202\271\343\203\210-\346\270\254\350\251\246-white space.js"