Skip to content

fix: ABSOLUTE_PATH_REGEXES should also accept forward slashes#20403

Closed
CertainLach wants to merge 1 commit into
webpack:mainfrom
CertainLach:patch-2
Closed

fix: ABSOLUTE_PATH_REGEXES should also accept forward slashes#20403
CertainLach wants to merge 1 commit into
webpack:mainfrom
CertainLach:patch-2

Conversation

@CertainLach

Copy link
Copy Markdown
Contributor

Summary

Latest version of webpack warns when it sees paths like C:/Users/..., despite those paths being valid for windows.

What kind of change does this PR introduce?

Both forward and back slashes are valid on Windows, this patch makes this warning go away, those paths are not affected by the normalization step below.

Both forward and inverse slashes are valid on Windows
@changeset-bot

changeset-bot Bot commented Feb 3, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: db34b9c

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@linux-foundation-easycla

Copy link
Copy Markdown

CLA Not Signed

@alexander-akait alexander-akait left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please fix lint and add a test case

@codspeed-hq

codspeed-hq Bot commented Feb 3, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 72 untouched benchmarks


Comparing CertainLach:patch-2 (db34b9c) with main (6008840)

Open in CodSpeed

alexander-akait added a commit that referenced this pull request Jun 19, 2026
Joining an absolute targetFile onto output.path produced an invalid
path on Windows (e.g. C:\out\D:\file) and threw EINVAL. Detect an
absolute target file and write it to that location directly.

Generalize WINDOWS_ABS_PATH_REGEXP to match every Windows absolute path
form including forward slashes (C:/, //), mirroring path.win32.isAbsolute,
and reuse it as the single absolute-path check across the codebase:
Compiler, util/fs isAbsolute, extractSourceMap, NormalModule (closes the
gap also reported in #20403), CleanPlugin and the sharing plugins.

Closes #12759
alexander-akait added a commit that referenced this pull request Jun 19, 2026
Joining an absolute targetFile onto output.path produced an invalid
path on Windows (e.g. C:\out\D:\file) and threw EINVAL. Detect an
absolute target file and write it to that location directly.

Introduce a single cross-platform ABSOLUTE_PATH_REGEXP (POSIX /foo plus
every Windows form: drive-letter C:\ and C:/, UNC, rooted), equal to
path.posix.isAbsolute || path.win32.isAbsolute, and reuse it as the one
absolute-path check across the codebase: Compiler, util/fs isAbsolute,
extractSourceMap, NormalModule (also fixes the forward-slash gap from
#20403), CleanPlugin and the sharing plugins.

Closes #12759
alexander-akait added a commit that referenced this pull request Jun 19, 2026
Joining an absolute targetFile onto output.path produced an invalid
path on Windows (e.g. C:\out\D:\file) and threw EINVAL. Detect an
absolute target file and write it to that location directly.

Introduce a single cross-platform ABSOLUTE_PATH_REGEXP (POSIX /foo plus
every Windows form: drive-letter C:\ and C:/, UNC, rooted), equal to
path.posix.isAbsolute || path.win32.isAbsolute, and reuse it as the one
absolute-path check across the codebase: Compiler, util/fs isAbsolute,
extractSourceMap, NormalModule (also fixes the forward-slash gap from
#20403), CleanPlugin and the sharing plugins.

Closes #12759
alexander-akait added a commit that referenced this pull request Jun 19, 2026
Joining an absolute targetFile onto output.path produced an invalid
path on Windows (e.g. C:\out\D:\file) and threw EINVAL. Detect an
absolute target file and write it to that location directly.

Introduce a single cross-platform ABSOLUTE_PATH_REGEXP (POSIX /foo plus
every Windows form: drive-letter C:\ and C:/, UNC, rooted), equal to
path.posix.isAbsolute || path.win32.isAbsolute, and reuse it as the one
absolute-path check across the codebase: Compiler, util/fs isAbsolute,
extractSourceMap, NormalModule (also fixes the forward-slash gap from
#20403), CleanPlugin and the sharing plugins.

Closes #12759
alexander-akait added a commit that referenced this pull request Jun 19, 2026
Joining an absolute targetFile onto output.path produced an invalid
path on Windows (e.g. C:\out\D:\file) and threw EINVAL. Detect an
absolute target file and write it to that location directly.

Introduce a single cross-platform ABSOLUTE_PATH_REGEXP (POSIX /foo plus
every Windows form: drive-letter C:\ and C:/, UNC, rooted), equal to
path.posix.isAbsolute || path.win32.isAbsolute, and reuse it as the one
absolute-path check across the codebase: Compiler, util/fs isAbsolute,
extractSourceMap, NormalModule (also fixes the forward-slash gap from
#20403), CleanPlugin and the sharing plugins.

Closes #12759
alexander-akait added a commit that referenced this pull request Jun 19, 2026
Joining an absolute targetFile onto output.path produced an invalid
path on Windows (e.g. C:\out\D:\file) and threw EINVAL. Detect an
absolute target file and write it to that location directly.

Introduce a single cross-platform ABSOLUTE_PATH_REGEXP (POSIX /foo plus
every Windows form: drive-letter C:\ and C:/, UNC, rooted), equal to
path.posix.isAbsolute || path.win32.isAbsolute, and reuse it as the one
absolute-path check across the codebase: Compiler, util/fs isAbsolute,
extractSourceMap, NormalModule (also fixes the forward-slash gap from
#20403), CleanPlugin and the sharing plugins.

Closes #12759
alexander-akait added a commit that referenced this pull request Jun 20, 2026
* fix: write emitted assets with an absolute path as-is

Joining an absolute targetFile onto output.path produced an invalid
path on Windows (e.g. C:\out\D:\file) and threw EINVAL. Detect an
absolute target file and write it to that location directly.

Introduce a single cross-platform ABSOLUTE_PATH_REGEXP (POSIX /foo plus
every Windows form: drive-letter C:\ and C:/, UNC, rooted), equal to
path.posix.isAbsolute || path.win32.isAbsolute, and reuse it as the one
absolute-path check across the codebase: Compiler, util/fs isAbsolute,
extractSourceMap, NormalModule (also fixes the forward-slash gap from
#20403), CleanPlugin and the sharing plugins.

Closes #12759

* fix: allow output.path to be the filesystem root

memfs and some platforms throw EISDIR (not EEXIST) when mkdir targets an
existing directory such as the root "/", which made output.path "/" fail.
Treat EISDIR like EEXIST in mkdirp/mkdirpSync (#10544).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants