Bug #77656 [Com]: proc_open() ignores invalid cwd argument

From: Date: Fri, 12 Jan 2024 16:32:15 +0000
Subject: Bug #77656 [Com]: proc_open() ignores invalid cwd argument
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-246251@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77656&edit=1 ID: 77656 Comment by: daniellisa320 at gmail dot com Reported by: php at yghe dot net Summary: proc_open() ignores invalid cwd argument Status: Open Type: Bug Package: Program Execution Operating System: Mac OS X 10.14.3 PHP Version: 7.3.2 Block user comment: N Private report: N New Comment: Certainly! It seems like you're asking for feedback or information about a bug, and you've requested a response including the keyword "." However, you haven't provided specific details about the bug or the context. Please provide more information about the bug, the platform you're referring to, and any relevant details for me to address your request accurately. Previous Comments: ------------------------------------------------------------------------ [2019-03-18 13:38:08] php at yghe dot net Yes, you're correct. A better "expected result" is perhaps: The subprocess exits immediately with an error code after "chdir()" fails, instead of executing in the wrong working directory. Before this, optionally, "proc_open()" might make some attempt to validate the directory and fail early with a more specific error message if "chdir()" seems unlikely to succeed (for example, because the working directory does not exist). However, this might be a difficult test to perform in the general case -- perhaps there are cases under, say, SELinux, where the parent process may be unable to see or access the directory but the child can. ------------------------------------------------------------------------ [2019-03-18 10:57:05] nikic@php.net From a quick look, the problem here is that chdir() is called after forking, at which point we can no longer influence whether proc_open in the parent process succeeds or not. ------------------------------------------------------------------------ [2019-02-22 22:41:06] php at yghe dot net Description: ------------ If the "$cwd" argument to "proc_open()" is invalid, the problem is ignored and execution continues (usually, with the wrong working directory). In "proc_open.c", near line 835, the return value of "chdir()" is explicitly ignored: https://github.com/php/php-src/commit/a5eeecb13f8683eaadb137aee33ac2dd292bf1fc#diff-19f692ed5f75687fc7bc1929910e540f Test script: --------------- <?php $spec = array( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w') ); $pipes = array(); $proc = proc_open( 'pwd', $spec, $pipes, 'asldknfaeqwglknewqklnwnrfl'); // <<< Any Invalid Directory var_dump($proc); var_dump(stream_get_contents($pipes[1])); var_dump(proc_get_status($proc)); Expected result: ---------------- "proc_open()" fails to open a subprocess and returns false if the "$cwd" argument is provided but not valid. Actual result: -------------- "proc_open()" continues in the presence of an invalid "$cwd", likely executing the subprocess in the wrong working directory. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=77656&edit=1

« previous php.bugs (#246251) next »