path: canonicalize Windows namespaced paths - #62639

Closed
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446
Closed

path: canonicalize Windows namespaced paths#62639
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446

Conversation

@jazelly

@jazellyjazelly commented Apr 8, 2026

Copy link
Copy Markdown
Member

Canonicalize valid Windows namespaced drive and UNC filesystem paths by stripping the prefix in these 2 kinds

\\?\C:\foo
\\?\UNC\server\share\foo

This is safe for ToNamespacedPath() because it resolves to the regular drive or UNC spelling before adding the namespace prefix back for Windows filesystem calls.

Fixes: #62446

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Apr 8, 2026
@jazellyjazelly added fs Issues and PRs related to file-system APIs and the fs module. path Issues and PRs related to the path subsystem. labels Apr 8, 2026
@StefanStojanovicStefanStojanovic added the request-ci Add this label to start a Jenkins CI on a PR. label Apr 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 8a63ce2 to 9c279dfCompareApril 29, 2026 22:48
@johncrim

johncrim commented Jun 9, 2026

Copy link
Copy Markdown

Related:
#60435
#61165

Another PR which provides a simpler fix for those issues. Ideally this PR should handle the toRealPath() exception too.

@jazelly
jazelly marked this pull request as ready for review June 9, 2026 06:07
@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 6468284 to d0dc6a0CompareJune 9, 2026 06:17
@jazelly

Copy link
Copy Markdown
MemberAuthor

@johncrim I think that's two different things, although very close, to fix. This PR aims to fix the extended path on windows.

@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazellyjazelly changed the title path: handle extended-length windows entry pathspath: canonicalize Windows namespaced pathsJun 9, 2026
Canonicalize Windows namespaced paths at internal filesystem identity
boundaries. Valid namespaced drive and UNC paths identify the same
filesystem objects as their non-namespaced spelling, so internal cache,
permission, and module lookups should compare the canonical identity
rather than the user-provided spelling.
Only the two known filesystem-equivalent namespace forms are rewritten:
\\?\C:\... and \\?\UNC\server\share\.... Other namespaced
forms are preserved because they may refer to device or drive-relative
semantics that are not equivalent to ordinary drive or UNC paths.
Signed-off-by: jazelly <xzha4350@gmail.com>
@jazelly

Copy link
Copy Markdown
MemberAuthor

After second thoughts and understanding to other mentioned issues, I think we should take care of them at the js layer to be safer. Closing this

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.pathIssues and PRs related to the path subsystem.request-ciAdd this label to start a Jenkins CI on a PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Node cannot handle extended windows paths

4 participants

@jazelly@johncrim@StefanStojanovic@nodejs-github-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

path: canonicalize Windows namespaced paths - #62639

Closed
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446
Closed

path: canonicalize Windows namespaced paths#62639
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446

Conversation

@jazelly

@jazellyjazelly commented Apr 8, 2026

Copy link
Copy Markdown
Member

Canonicalize valid Windows namespaced drive and UNC filesystem paths by stripping the prefix in these 2 kinds

\\?\C:\foo
\\?\UNC\server\share\foo

This is safe for ToNamespacedPath() because it resolves to the regular drive or UNC spelling before adding the namespace prefix back for Windows filesystem calls.

Fixes: #62446

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Apr 8, 2026
@jazellyjazelly added fs Issues and PRs related to file-system APIs and the fs module. path Issues and PRs related to the path subsystem. labels Apr 8, 2026
@StefanStojanovicStefanStojanovic added the request-ci Add this label to start a Jenkins CI on a PR. label Apr 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 8a63ce2 to 9c279dfCompareApril 29, 2026 22:48
@johncrim

johncrim commented Jun 9, 2026

Copy link
Copy Markdown

Related:
#60435
#61165

Another PR which provides a simpler fix for those issues. Ideally this PR should handle the toRealPath() exception too.

@jazelly
jazelly marked this pull request as ready for review June 9, 2026 06:07
@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 6468284 to d0dc6a0CompareJune 9, 2026 06:17
@jazelly

Copy link
Copy Markdown
MemberAuthor

@johncrim I think that's two different things, although very close, to fix. This PR aims to fix the extended path on windows.

@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazellyjazelly changed the title path: handle extended-length windows entry pathspath: canonicalize Windows namespaced pathsJun 9, 2026
Canonicalize Windows namespaced paths at internal filesystem identity
boundaries. Valid namespaced drive and UNC paths identify the same
filesystem objects as their non-namespaced spelling, so internal cache,
permission, and module lookups should compare the canonical identity
rather than the user-provided spelling.
Only the two known filesystem-equivalent namespace forms are rewritten:
\\?\C:\... and \\?\UNC\server\share\.... Other namespaced
forms are preserved because they may refer to device or drive-relative
semantics that are not equivalent to ordinary drive or UNC paths.
Signed-off-by: jazelly <xzha4350@gmail.com>
@jazelly

Copy link
Copy Markdown
MemberAuthor

After second thoughts and understanding to other mentioned issues, I think we should take care of them at the js layer to be safer. Closing this

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.pathIssues and PRs related to the path subsystem.request-ciAdd this label to start a Jenkins CI on a PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Node cannot handle extended windows paths

4 participants

@jazelly@johncrim@StefanStojanovic@nodejs-github-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

path: canonicalize Windows namespaced paths - #62639

Closed
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446
Closed

path: canonicalize Windows namespaced paths#62639
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446

Conversation

@jazelly

@jazellyjazelly commented Apr 8, 2026

Copy link
Copy Markdown
Member

Canonicalize valid Windows namespaced drive and UNC filesystem paths by stripping the prefix in these 2 kinds

\\?\C:\foo
\\?\UNC\server\share\foo

This is safe for ToNamespacedPath() because it resolves to the regular drive or UNC spelling before adding the namespace prefix back for Windows filesystem calls.

Fixes: #62446

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Apr 8, 2026
@jazellyjazelly added fs Issues and PRs related to file-system APIs and the fs module. path Issues and PRs related to the path subsystem. labels Apr 8, 2026
@StefanStojanovicStefanStojanovic added the request-ci Add this label to start a Jenkins CI on a PR. label Apr 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 8a63ce2 to 9c279dfCompareApril 29, 2026 22:48
@johncrim

johncrim commented Jun 9, 2026

Copy link
Copy Markdown

Related:
#60435
#61165

Another PR which provides a simpler fix for those issues. Ideally this PR should handle the toRealPath() exception too.

@jazelly
jazelly marked this pull request as ready for review June 9, 2026 06:07
@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 6468284 to d0dc6a0CompareJune 9, 2026 06:17
@jazelly

Copy link
Copy Markdown
MemberAuthor

@johncrim I think that's two different things, although very close, to fix. This PR aims to fix the extended path on windows.

@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazellyjazelly changed the title path: handle extended-length windows entry pathspath: canonicalize Windows namespaced pathsJun 9, 2026
Canonicalize Windows namespaced paths at internal filesystem identity
boundaries. Valid namespaced drive and UNC paths identify the same
filesystem objects as their non-namespaced spelling, so internal cache,
permission, and module lookups should compare the canonical identity
rather than the user-provided spelling.
Only the two known filesystem-equivalent namespace forms are rewritten:
\\?\C:\... and \\?\UNC\server\share\.... Other namespaced
forms are preserved because they may refer to device or drive-relative
semantics that are not equivalent to ordinary drive or UNC paths.
Signed-off-by: jazelly <xzha4350@gmail.com>
@jazelly

Copy link
Copy Markdown
MemberAuthor

After second thoughts and understanding to other mentioned issues, I think we should take care of them at the js layer to be safer. Closing this

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.pathIssues and PRs related to the path subsystem.request-ciAdd this label to start a Jenkins CI on a PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Node cannot handle extended windows paths

4 participants

@jazelly@johncrim@StefanStojanovic@nodejs-github-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

path: canonicalize Windows namespaced paths - #62639

Closed
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446
Closed

path: canonicalize Windows namespaced paths#62639
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446

Conversation

@jazelly

@jazellyjazelly commented Apr 8, 2026

Copy link
Copy Markdown
Member

Canonicalize valid Windows namespaced drive and UNC filesystem paths by stripping the prefix in these 2 kinds

\\?\C:\foo
\\?\UNC\server\share\foo

This is safe for ToNamespacedPath() because it resolves to the regular drive or UNC spelling before adding the namespace prefix back for Windows filesystem calls.

Fixes: #62446

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Apr 8, 2026
@jazellyjazelly added fs Issues and PRs related to file-system APIs and the fs module. path Issues and PRs related to the path subsystem. labels Apr 8, 2026
@StefanStojanovicStefanStojanovic added the request-ci Add this label to start a Jenkins CI on a PR. label Apr 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 8a63ce2 to 9c279dfCompareApril 29, 2026 22:48
@johncrim

johncrim commented Jun 9, 2026

Copy link
Copy Markdown

Related:
#60435
#61165

Another PR which provides a simpler fix for those issues. Ideally this PR should handle the toRealPath() exception too.

@jazelly
jazelly marked this pull request as ready for review June 9, 2026 06:07
@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 6468284 to d0dc6a0CompareJune 9, 2026 06:17
@jazelly

Copy link
Copy Markdown
MemberAuthor

@johncrim I think that's two different things, although very close, to fix. This PR aims to fix the extended path on windows.

@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazellyjazelly changed the title path: handle extended-length windows entry pathspath: canonicalize Windows namespaced pathsJun 9, 2026
Canonicalize Windows namespaced paths at internal filesystem identity
boundaries. Valid namespaced drive and UNC paths identify the same
filesystem objects as their non-namespaced spelling, so internal cache,
permission, and module lookups should compare the canonical identity
rather than the user-provided spelling.
Only the two known filesystem-equivalent namespace forms are rewritten:
\\?\C:\... and \\?\UNC\server\share\.... Other namespaced
forms are preserved because they may refer to device or drive-relative
semantics that are not equivalent to ordinary drive or UNC paths.
Signed-off-by: jazelly <xzha4350@gmail.com>
@jazelly

Copy link
Copy Markdown
MemberAuthor

After second thoughts and understanding to other mentioned issues, I think we should take care of them at the js layer to be safer. Closing this

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.pathIssues and PRs related to the path subsystem.request-ciAdd this label to start a Jenkins CI on a PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Node cannot handle extended windows paths

4 participants

@jazelly@johncrim@StefanStojanovic@nodejs-github-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

path: canonicalize Windows namespaced paths - #62639

Closed
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446
Closed

path: canonicalize Windows namespaced paths#62639
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446

Conversation

@jazelly

@jazellyjazelly commented Apr 8, 2026

Copy link
Copy Markdown
Member

Canonicalize valid Windows namespaced drive and UNC filesystem paths by stripping the prefix in these 2 kinds

\\?\C:\foo
\\?\UNC\server\share\foo

This is safe for ToNamespacedPath() because it resolves to the regular drive or UNC spelling before adding the namespace prefix back for Windows filesystem calls.

Fixes: #62446

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Apr 8, 2026
@jazellyjazelly added fs Issues and PRs related to file-system APIs and the fs module. path Issues and PRs related to the path subsystem. labels Apr 8, 2026
@StefanStojanovicStefanStojanovic added the request-ci Add this label to start a Jenkins CI on a PR. label Apr 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 8a63ce2 to 9c279dfCompareApril 29, 2026 22:48
@johncrim

johncrim commented Jun 9, 2026

Copy link
Copy Markdown

Related:
#60435
#61165

Another PR which provides a simpler fix for those issues. Ideally this PR should handle the toRealPath() exception too.

@jazelly
jazelly marked this pull request as ready for review June 9, 2026 06:07
@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 6468284 to d0dc6a0CompareJune 9, 2026 06:17
@jazelly

Copy link
Copy Markdown
MemberAuthor

@johncrim I think that's two different things, although very close, to fix. This PR aims to fix the extended path on windows.

@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazellyjazelly changed the title path: handle extended-length windows entry pathspath: canonicalize Windows namespaced pathsJun 9, 2026
Canonicalize Windows namespaced paths at internal filesystem identity
boundaries. Valid namespaced drive and UNC paths identify the same
filesystem objects as their non-namespaced spelling, so internal cache,
permission, and module lookups should compare the canonical identity
rather than the user-provided spelling.
Only the two known filesystem-equivalent namespace forms are rewritten:
\\?\C:\... and \\?\UNC\server\share\.... Other namespaced
forms are preserved because they may refer to device or drive-relative
semantics that are not equivalent to ordinary drive or UNC paths.
Signed-off-by: jazelly <xzha4350@gmail.com>
@jazelly

Copy link
Copy Markdown
MemberAuthor

After second thoughts and understanding to other mentioned issues, I think we should take care of them at the js layer to be safer. Closing this

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.pathIssues and PRs related to the path subsystem.request-ciAdd this label to start a Jenkins CI on a PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Node cannot handle extended windows paths

4 participants

@jazelly@johncrim@StefanStojanovic@nodejs-github-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

path: canonicalize Windows namespaced paths - #62639

Closed
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446
Closed

path: canonicalize Windows namespaced paths#62639
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446

Conversation

@jazelly

@jazellyjazelly commented Apr 8, 2026

Copy link
Copy Markdown
Member

Canonicalize valid Windows namespaced drive and UNC filesystem paths by stripping the prefix in these 2 kinds

\\?\C:\foo
\\?\UNC\server\share\foo

This is safe for ToNamespacedPath() because it resolves to the regular drive or UNC spelling before adding the namespace prefix back for Windows filesystem calls.

Fixes: #62446

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Apr 8, 2026
@jazellyjazelly added fs Issues and PRs related to file-system APIs and the fs module. path Issues and PRs related to the path subsystem. labels Apr 8, 2026
@StefanStojanovicStefanStojanovic added the request-ci Add this label to start a Jenkins CI on a PR. label Apr 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 8a63ce2 to 9c279dfCompareApril 29, 2026 22:48
@johncrim

johncrim commented Jun 9, 2026

Copy link
Copy Markdown

Related:
#60435
#61165

Another PR which provides a simpler fix for those issues. Ideally this PR should handle the toRealPath() exception too.

@jazelly
jazelly marked this pull request as ready for review June 9, 2026 06:07
@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 6468284 to d0dc6a0CompareJune 9, 2026 06:17
@jazelly

Copy link
Copy Markdown
MemberAuthor

@johncrim I think that's two different things, although very close, to fix. This PR aims to fix the extended path on windows.

@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazellyjazelly changed the title path: handle extended-length windows entry pathspath: canonicalize Windows namespaced pathsJun 9, 2026
Canonicalize Windows namespaced paths at internal filesystem identity
boundaries. Valid namespaced drive and UNC paths identify the same
filesystem objects as their non-namespaced spelling, so internal cache,
permission, and module lookups should compare the canonical identity
rather than the user-provided spelling.
Only the two known filesystem-equivalent namespace forms are rewritten:
\\?\C:\... and \\?\UNC\server\share\.... Other namespaced
forms are preserved because they may refer to device or drive-relative
semantics that are not equivalent to ordinary drive or UNC paths.
Signed-off-by: jazelly <xzha4350@gmail.com>
@jazelly

Copy link
Copy Markdown
MemberAuthor

After second thoughts and understanding to other mentioned issues, I think we should take care of them at the js layer to be safer. Closing this

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.pathIssues and PRs related to the path subsystem.request-ciAdd this label to start a Jenkins CI on a PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Node cannot handle extended windows paths

4 participants

@jazelly@johncrim@StefanStojanovic@nodejs-github-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

path: canonicalize Windows namespaced paths - #62639

Closed
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446
Closed

path: canonicalize Windows namespaced paths#62639
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446

Conversation

@jazelly

@jazellyjazelly commented Apr 8, 2026

Copy link
Copy Markdown
Member

Canonicalize valid Windows namespaced drive and UNC filesystem paths by stripping the prefix in these 2 kinds

\\?\C:\foo
\\?\UNC\server\share\foo

This is safe for ToNamespacedPath() because it resolves to the regular drive or UNC spelling before adding the namespace prefix back for Windows filesystem calls.

Fixes: #62446

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Apr 8, 2026
@jazellyjazelly added fs Issues and PRs related to file-system APIs and the fs module. path Issues and PRs related to the path subsystem. labels Apr 8, 2026
@StefanStojanovicStefanStojanovic added the request-ci Add this label to start a Jenkins CI on a PR. label Apr 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 8a63ce2 to 9c279dfCompareApril 29, 2026 22:48
@johncrim

johncrim commented Jun 9, 2026

Copy link
Copy Markdown

Related:
#60435
#61165

Another PR which provides a simpler fix for those issues. Ideally this PR should handle the toRealPath() exception too.

@jazelly
jazelly marked this pull request as ready for review June 9, 2026 06:07
@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 6468284 to d0dc6a0CompareJune 9, 2026 06:17
@jazelly

Copy link
Copy Markdown
MemberAuthor

@johncrim I think that's two different things, although very close, to fix. This PR aims to fix the extended path on windows.

@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazellyjazelly changed the title path: handle extended-length windows entry pathspath: canonicalize Windows namespaced pathsJun 9, 2026
Canonicalize Windows namespaced paths at internal filesystem identity
boundaries. Valid namespaced drive and UNC paths identify the same
filesystem objects as their non-namespaced spelling, so internal cache,
permission, and module lookups should compare the canonical identity
rather than the user-provided spelling.
Only the two known filesystem-equivalent namespace forms are rewritten:
\\?\C:\... and \\?\UNC\server\share\.... Other namespaced
forms are preserved because they may refer to device or drive-relative
semantics that are not equivalent to ordinary drive or UNC paths.
Signed-off-by: jazelly <xzha4350@gmail.com>
@jazelly

Copy link
Copy Markdown
MemberAuthor

After second thoughts and understanding to other mentioned issues, I think we should take care of them at the js layer to be safer. Closing this

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.pathIssues and PRs related to the path subsystem.request-ciAdd this label to start a Jenkins CI on a PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Node cannot handle extended windows paths

4 participants

@jazelly@johncrim@StefanStojanovic@nodejs-github-bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

path: canonicalize Windows namespaced paths - #62639

Closed
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446
Closed

path: canonicalize Windows namespaced paths#62639
jazelly wants to merge 1 commit into
nodejs:mainfrom
jazelly:fix-62446

Conversation

@jazelly

@jazellyjazelly commented Apr 8, 2026

Copy link
Copy Markdown
Member

Canonicalize valid Windows namespaced drive and UNC filesystem paths by stripping the prefix in these 2 kinds

\\?\C:\foo
\\?\UNC\server\share\foo

This is safe for ToNamespacedPath() because it resolves to the regular drive or UNC spelling before adding the namespace prefix back for Windows filesystem calls.

Fixes: #62446

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Apr 8, 2026
@jazellyjazelly added fs Issues and PRs related to file-system APIs and the fs module. path Issues and PRs related to the path subsystem. labels Apr 8, 2026
@StefanStojanovicStefanStojanovic added the request-ci Add this label to start a Jenkins CI on a PR. label Apr 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 8a63ce2 to 9c279dfCompareApril 29, 2026 22:48
@johncrim

johncrim commented Jun 9, 2026

Copy link
Copy Markdown

Related:
#60435
#61165

Another PR which provides a simpler fix for those issues. Ideally this PR should handle the toRealPath() exception too.

@jazelly
jazelly marked this pull request as ready for review June 9, 2026 06:07
@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazelly
jazellyforce-pushed the fix-62446 branch 2 times, most recently from 6468284 to d0dc6a0CompareJune 9, 2026 06:17
@jazelly

Copy link
Copy Markdown
MemberAuthor

@johncrim I think that's two different things, although very close, to fix. This PR aims to fix the extended path on windows.

@jazellyjazelly added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 9, 2026
@jazellyjazelly changed the title path: handle extended-length windows entry pathspath: canonicalize Windows namespaced pathsJun 9, 2026
Canonicalize Windows namespaced paths at internal filesystem identity
boundaries. Valid namespaced drive and UNC paths identify the same
filesystem objects as their non-namespaced spelling, so internal cache,
permission, and module lookups should compare the canonical identity
rather than the user-provided spelling.
Only the two known filesystem-equivalent namespace forms are rewritten:
\\?\C:\... and \\?\UNC\server\share\.... Other namespaced
forms are preserved because they may refer to device or drive-relative
semantics that are not equivalent to ordinary drive or UNC paths.
Signed-off-by: jazelly <xzha4350@gmail.com>
@jazelly

Copy link
Copy Markdown
MemberAuthor

After second thoughts and understanding to other mentioned issues, I think we should take care of them at the js layer to be safer. Closing this

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.pathIssues and PRs related to the path subsystem.request-ciAdd this label to start a Jenkins CI on a PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Node cannot handle extended windows paths

4 participants

@jazelly@johncrim@StefanStojanovic@nodejs-github-bot