Skip to content

[backport] Fix Windows paths with accented characters breaking dart-sass - #14274

Merged
cderv merged 2 commits into
v1.9from
backport/issue-14267
Mar 27, 2026
Merged

[backport] Fix Windows paths with accented characters breaking dart-sass#14274
cderv merged 2 commits into
v1.9from
backport/issue-14267

Conversation

@cderv

@cderv cderv commented Mar 26, 2026

Copy link
Copy Markdown
Member

Important

Backport from #14273

On Windows, safeWindowsExec writes temp .bat files as UTF-8 but cmd.exe reads them using OEM code page (CP850), garbling accented characters in paths (e.g., C:\Users\Sébastien\).

Adds chcp 65001 >nul to switch cmd.exe to UTF-8 before the command line is parsed. Uses CRLF line endings for correct batch parsing.

The full fix on main (#14273) also bypasses sass.bat entirely by calling dart.exe directly — that larger change is not backported here.

Fixes #14267

cderv added 2 commits March 26, 2026 14:07
safeWindowsExec writes temp .bat files as UTF-8 (Deno default), but
cmd.exe reads them using the OEM code page (e.g., CP850). Multi-byte
UTF-8 characters like é (0xC3 0xA9) get misinterpreted, breaking
paths with accented characters (e.g., C:\Users\Sébastien\).

Add `chcp 65001 >nul` to switch cmd.exe to UTF-8 before the command
line is parsed. Use CRLF line endings for correct .bat parsing.
@cderv
cderv merged commit 8dd9762 into v1.9 Mar 27, 2026
44 checks passed
@cderv
cderv deleted the backport/issue-14267 branch March 27, 2026 19:25
cderv added a commit that referenced this pull request May 22, 2026
…rsand (#14535)

* [backport] Bypass sass.bat on Windows to fix ampersand-in-username regression (#14534)

The v1.9 introduction of safeWindowsExec broke dart-sass for users whose
Windows profile path contains `&` (e.g., C:\Users\Tom & Jerry\). The
ampersand is a cmd.exe command separator, so the temp .bat wrapper that
safeWindowsExec writes is split mid-path and fails. The existing #14367
fallback to direct sass.bat execution does not help: Windows still spawns
cmd.exe internally to interpret any .bat file, and the ampersand splits
again.

Backport of the dart.exe + sass.snapshot direct-invocation rewrite from
PR #14273 (commit 4a7b6ce). Calling dart.exe through Deno.Command
bypasses cmd.exe entirely and removes the whole class of .bat issues on
Windows. The bundled dart-sass version is identical between v1.9 and main
(DARTSASS=1.87.0), so the src/dart.exe + src/sass.snapshot layout is the
same on disk.

This also subsumes the #14367 enterprise group-policy fallback (no .bat =
no policy block) and reinforces the #14267 accented-path fix already
backported via #14274.

Out of scope: other safeWindowsExec callers (texlive, zip, shell) still
go through cmd.exe and remain vulnerable to ampersand in paths. Those
have separate fixes upstream and are not covered by this backport.

* Add regression test for ampersand in dart-sass paths (#14534)

Cover the exact path pattern that broke v1.9 (e.g. C:\Users\Tom & Jerry\)
to prevent re-regression. Mirrors the existing spaced/accented tests by
junctioning the real dart-sass install dir into an ampersand-containing
parent directory and asserting compilation succeeds.

The junction itself is created via cmd /c mklink — Deno.Command passes
each arg as a separate CreateProcess argument, so the ampersand in the
target path is not interpreted by cmd.exe as a command separator.
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.

1 participant