Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 22, 2026

This change addresses item #4139

This changes visible behavior

The following changes are proposed:

  • Sanitize null characters (\u0000) from environment variable values in EnvironmentPrivate.set()
  • Add unit test for null character sanitization

The purpose of this change

When PATH contains CJK characters and Windows UTF-8 beta mode is enabled, encoding corruption can introduce null bytes into environment variable values. Node.js child_process.spawn throws on null characters, causing Visual C++ configuration to fail with "cl undefined" returned code -1.

Example corrupted path from issue:

C:\\微信web开发者工具\\dll → C:\\��web\u0000�\u0005�w\\dll

Fix strips null bytes when setting environment variables:

if (typeof value === 'string') {
    value = value.replace(/\0/g, '');
}

Other Notes/Information

  • Type check is required because value can be null when preserveNull is true
  • CodeQL security check passed

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 0psvsblobprodwus2145.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/npm install (dns block)
  • 2wrvsblobprodwus2180.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • 40vvsblobprodwus2135.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
    • Triggering command: /usr/local/bin/node node /usr/local/bin/npm install (dns block)
  • 5bdvsblobprodwus2128.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/npm install (dns block)
  • 7t8vsblobprodwus2168.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/npm install (dns block)
  • b15vsblobprodwus2164.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • b53vsblobprodwus2154.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • d94vsblobprodwus2119.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • ezcvsblobprodwus2170.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/npm install (dns block)
  • k4pvsblobprodwus2140.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
    • Triggering command: /usr/local/bin/node node /usr/local/bin/npm install (dns block)
  • n6wvsblobprodwus2123.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • p2tvsblobprodwus2189.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)
  • v41vsblobprodwus2175.vsblob.vsassets.io
    • Triggering command: /usr/local/bin/node node /usr/local/bin/yarn install (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>[Bug] When Environment Path contains CJK Characters, Visual C++ may not be configured</issue_title>
<issue_description>### Brief Issue Summary

It's a strange bug, and I don't know why.
Background: I am a Chinese user(code page 936), but enabled Beta: use utf-8 for worldwide language support

Due to some reasons, I have such a key C:\\微信web开发者工具\\dll in my path and it will be read as 43 3A 5C 5C 00 00 77 65 62 5C 75 30 30 30 30 00 5C 75 30 30 30 35 00 77 5C 5C 64 6C 6C on my computer. You see there contains \u0000 so node child process will throw an error.

CMake Tools Diagnostics

{
  "os": "win32",
  "vscodeVersion": "1.107.0",
  "cmtVersion": "1.13.0",
  "configurations": [
    {
      "folder": "c:\\Users\\Alphagocc\\Documents\\Programming\\Project\\LemonLime\\Project_LemonLime",
      "cmakeVersion": "4.2.0",
      "configured": true,
      "generator": "Ninja",
      "usesPresets": false,
      "compilers": {}
    }
  ],
  "cpptoolsIntegration": {
    "isReady": false,
    "hasCodeModel": false,
    "activeBuildType": "",
    "buildTypesSeen": [],
    "requests": [],
    "responses": [],
    "partialMatches": [],
    "targetCount": 0,
    "executablesCount": 0,
    "librariesCount": 0,
    "targets": []
  },
  "settings": [
    {
      "communicationMode": "automatic",
      "useCMakePresets": "auto",
      "configureOnOpen": true
    }
  ]
}

Debug Log

[main] Building folder: c:/Users/Alphagocc/Documents/Programming/Project/LemonLime/build 
[main] Saving open files before configure/build
[main] Configuring project: Project_LemonLime 
[main] Saving open files before configure/build
[expand] expanded ${workspaceFolder}/../build/
[driver] Start configure 
[driver] Running pre-configure checks and steps
[driver] CMake flags are ["-DCMAKE_BUILD_TYPE:STRING=Debug","-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE","-DCMAKE_PREFIX_PATH=C:\\Qt\\6.9.3\\msvc2022_64","--no-warn-unused-cli"]
[expand] expanded ${workspaceFolder}/../build/
[cmakefileapi-driver] Configuring using kit
[cmakefileapi-driver] Invoking CMake C:\Users\Alphagocc\scoop\shims\cmake.EXE with arguments ["-DCMAKE_BUILD_TYPE:STRING=Debug","-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE","-DCMAKE_PREFIX_PATH=C:\\Qt\\6.9.3\\msvc2022_64","--no-warn-unused-cli","-S","C:/Users/Alphagocc/Documents/Programming/Project/LemonLime/Project_LemonLime","-B","c:/Users/Alphagocc/Documents/Programming/Project/LemonLime/build","-G","Ninja"]
[proc] Executing command: C:\Users\Alphagocc\scoop\shims\cmake.EXE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_PREFIX_PATH=C:\Qt\6.9.3\msvc2022_64 --no-warn-unused-cli -S C:/Users/Alphagocc/Documents/Programming/Project/LemonLime/Project_LemonLime -B c:/Users/Alphagocc/Documents/Programming/Project/LemonLime/build -G Ninja
[proc]   with environment: {"ALLUSERSPROFILE":"C:\\ProgramData","APPDATA":"C:\\Users\\Alphagocc\\AppData\\Roaming","APPLICATIONINSIGHTS_CONFIGURATION_CONTENT":"{}","APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL":"1","CARGO_HOME":"C:\\Users\\Alphagocc\\scoop\\persist\\rustup\\.cargo","CHROME_CRASHPAD_PIPE_NAME":"\\\\.\\pipe\\crashpad_26392_PGJUXCQASXRBJXCY","CMT_DEVRUN":"1","COMPUTERNAME":"U25A0-TB16PLUS","CUDA_PATH":"C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v12.9","CUDA_PATH_V12_9":"C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v12.9","ComSpec":"C:\\WINDOWS\\system32\\cmd.exe","CommonProgramFiles":"C:\\Program Files\\Common Files","CommonProgramFiles(x86)":"C:\\Program Files (x86)\\Common Files","CommonProgramW6432":"C:\\Program Files\\Common Files","DriverData":"C:\\Windows\\System32\\Drivers\\DriverData","EFC_15048_1262719628":"1","EFC_15048_1592913036":"1","EFC_15048_2283032206":"1","EFC_15048_2775293581":"1","EFC_15048_3789132940":"1","ELECTRON_RUN_AS_NODE":"1","GHIDRA_INSTALL_DIR":"C:\\Users\\Alphagocc\\scoop\\apps\\ghidra\\current","GIT_INSTALL_ROOT":"C:\\Users\\Alphagocc\\scoop\\apps\\git\\current","HOMEDRIVE":"C:","HOMEPATH":"\\Users\\Alphagocc","JAVA_HOME":"C:\\Users\\Alphagocc\\scoop\\apps\\zulufx17-jre\\current","LEVEL_ZERO_V1_SDK_PATH":"C:\\Program Files\\LevelZeroSDK\\1.24.2\\","LIBCLANG_PATH":"C:\\Users\\Alphagocc\\scoop\\apps\\llvm\\current\\bin","LLVM_LIB_DIR":"C:\\Users\\Alphagocc\\scoop\\apps\\llvm\\current\\lib","LOCALAPPDATA":"C:\\Users\\Alphagocc\\AppData\\Local","LOGONSERVER":"\\\\U25A0-TB16PLUS","LUA_CPATH":"C:\\Users\\Alphagocc\\scoop\\apps\\lua\\current\\bin","LUA_EXE_PATH":"C:\\Users\\Alphagocc\\scoop\\apps\\lua\\current\\bin","NUMBER_OF_PROCESSORS":"16","NVM_HOME":"C:\\Users\\Alphagocc\\scoop\\apps\\nvm\\current","NVM_SYMLINK":"C:\\Users\\Alphagocc\\scoop\\persist\\nvm\\nodejs\\nodejs","OS":"Windows_NT","OneDrive":"C:\\Users\\Alphagocc\\OneDrive - nbspcc","OneDriveCommercial":"C:\\Users\\Alphagocc\\OneDrive - nbspcc","OneDriveConsumer":"C:\\Users\\Alphagocc\\OneDrive","PATHEXT":".COM;.EXE;.BAT;.CMD;.VBS;.VBE;...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes microsoft/vscode-cmake-tools#4639

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for you](https://github.com/microsoft/vscode-cmake-tools/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.
Copilot AI and others added 2 commits January 22, 2026 20:46
…nment variables

Co-authored-by: hanniavalera <90047725+hanniavalera@users.noreply.github.com>
Co-authored-by: hanniavalera <90047725+hanniavalera@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix bug with CJK characters in environment path Jan 22, 2026
Copilot AI requested a review from hanniavalera January 22, 2026 20:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants