From bebc86d9af7d2a2f0ff7c1e8ce65a8aad4a53730 Mon Sep 17 00:00:00 2001 From: Archkon <180910180+Archkon@users.noreply.github.com> Date: Thu, 6 Aug 2026 12:58:33 +0800 Subject: [PATCH] process: reject null bytes in chdir paths Validate directory strings before calling the native chdir binding to prevent paths from being truncated at embedded null bytes. Signed-off-by: Archkon <180910180+Archkon@users.noreply.github.com> --- lib/internal/bootstrap/switches/does_own_process_state.js | 4 ++-- test/parallel/test-process-chdir.js | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/internal/bootstrap/switches/does_own_process_state.js b/lib/internal/bootstrap/switches/does_own_process_state.js index 370da66a825f..5019a8ff2ee3 100644 --- a/lib/internal/bootstrap/switches/does_own_process_state.js +++ b/lib/internal/bootstrap/switches/does_own_process_state.js @@ -32,7 +32,7 @@ if (credentials.implementsPosixCredentials) { const { parseFileMode, validateArray, - validateString, + validateStringWithoutNullBytes, validateUint32, } = require('internal/validators'); @@ -124,7 +124,7 @@ if (isBuildingSnapshot()) { } function wrappedChdir(directory) { - validateString(directory, 'directory'); + validateStringWithoutNullBytes(directory, 'directory'); rawMethods.chdir(directory); // Mark cache that it requires an update. cachedCwd = ''; diff --git a/test/parallel/test-process-chdir.js b/test/parallel/test-process-chdir.js index 42d2a60c8ec6..ed11665998e4 100644 --- a/test/parallel/test-process-chdir.js +++ b/test/parallel/test-process-chdir.js @@ -44,3 +44,9 @@ const err = { }; assert.throws(function() { process.chdir({}); }, err); assert.throws(function() { process.chdir(); }, err); + +assert.throws(() => process.chdir(`${dir}\u0000ignored`), { + code: 'ERR_INVALID_ARG_VALUE', + name: 'TypeError', + message: /The argument 'directory' must be a string without null bytes/, +});