From d42d2b51dfa63897e6807902ef2ac48461e547f3 Mon Sep 17 00:00:00 2001 From: Ivan Kopeykin Date: Mon, 29 Jun 2020 12:24:44 +0300 Subject: [PATCH] check for Windows absolute url in URLAbsoluteSpecifier util --- lib/NormalModule.js | 4 ++-- lib/NormalModuleFactory.js | 11 +++-------- lib/util/URLAbsoluteSpecifier.js | 13 +++---------- 3 files changed, 8 insertions(+), 20 deletions(-) diff --git a/lib/NormalModule.js b/lib/NormalModule.js index 488b6f971..c9be2bc52 100644 --- a/lib/NormalModule.js +++ b/lib/NormalModule.js @@ -29,7 +29,7 @@ const RuntimeGlobals = require("./RuntimeGlobals"); const UnsupportedSchemeError = require("./UnsupportedSchemeError"); const WebpackError = require("./WebpackError"); const { decodeDataURI } = require("./util/DataURI"); -const { getScheme, isSchemeSupported } = require("./util/URLAbsoluteSpecifier"); +const { getScheme } = require("./util/URLAbsoluteSpecifier"); const { compareLocations, concatComparators, @@ -137,7 +137,7 @@ const asBuffer = input => { const readResourceFn = fs => { return (resource, callback) => { const scheme = getScheme(resource); - if (scheme && isSchemeSupported(scheme)) { + if (scheme) { switch (scheme) { case "data": return process.nextTick(() => { diff --git a/lib/NormalModuleFactory.js b/lib/NormalModuleFactory.js index 47dd104d7..fea2b9846 100644 --- a/lib/NormalModuleFactory.js +++ b/lib/NormalModuleFactory.js @@ -22,11 +22,7 @@ const BasicMatcherRulePlugin = require("./rules/BasicMatcherRulePlugin"); const RuleSetCompiler = require("./rules/RuleSetCompiler"); const UseEffectRulePlugin = require("./rules/UseEffectRulePlugin"); const LazySet = require("./util/LazySet"); -const { - getScheme, - getMimetype, - isSchemeSupported -} = require("./util/URLAbsoluteSpecifier"); +const { getScheme, getMimetype } = require("./util/URLAbsoluteSpecifier"); const { cachedCleverMerge, cachedSetProperty } = require("./util/cleverMerge"); const { join } = require("./util/fs"); @@ -327,7 +323,6 @@ class NormalModuleFactory extends ModuleFactory { let resource; /** @type {string | undefined} */ const scheme = getScheme(unresolvedResource); - const supportedScheme = scheme ? isSchemeSupported(scheme) : false; let resourceResolveData; let loaders; @@ -391,7 +386,7 @@ class NormalModuleFactory extends ModuleFactory { ? resource.replace(/\?.*/, "") : resourcePath, resourceQuery, - mimetype: supportedScheme ? getMimetype(scheme, resource) : "", + mimetype: scheme ? getMimetype(scheme, resource) : "", issuer: contextInfo.issuer, compiler: contextInfo.compiler }); @@ -515,7 +510,7 @@ class NormalModuleFactory extends ModuleFactory { return continueCallback(); } - if (supportedScheme) { + if (scheme) { resource = unresolvedResource; continueCallback(); } else { diff --git a/lib/util/URLAbsoluteSpecifier.js b/lib/util/URLAbsoluteSpecifier.js index e2efc6a5b..c3cc6222e 100644 --- a/lib/util/URLAbsoluteSpecifier.js +++ b/lib/util/URLAbsoluteSpecifier.js @@ -10,7 +10,7 @@ const { getMimetype: getDataUrlMimetype } = require("./DataURI"); /** @typedef {import("./fs").InputFileSystem} InputFileSystem */ /** @typedef {(error: Error|null, result?: Buffer) => void} ErrorFirstCallback */ -const supportedSchemes = new Set(["data", "file", "http", "https"]); +const backSlashCharCode = "\\".charCodeAt(0); const aLowerCaseCharCode = "a".charCodeAt(0); const zLowerCaseCharCode = "z".charCodeAt(0); const aUpperCaseCharCode = "A".charCodeAt(0); @@ -53,6 +53,8 @@ function getScheme(specifier) { // Scheme must end with colon if (ch !== colonCharCode) return undefined; + // Check for Windows absolute path + if (specifier.charCodeAt(i + 1) === backSlashCharCode) return undefined; return specifier.slice(0, i).toLowerCase(); } @@ -79,15 +81,6 @@ function getMimetype(scheme, specifier) { } } -/** - * @param {string} scheme scheme - * @returns {boolean} supported or not - */ -function isSchemeSupported(scheme) { - return supportedSchemes.has(scheme); -} - exports.getScheme = getScheme; exports.getMimetype = getMimetype; exports.getProtocol = getProtocol; -exports.isSchemeSupported = isSchemeSupported;