Skip to content

Commit 86c7d3e

Browse files
committed
Fix GH-12655: proc_open() does not take into account references in the descriptor array
Closes GH-12658.
1 parent db26aee commit 86c7d3e

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ PHP NEWS
1212
. Fix memory leak in syslog device handling. (danog)
1313
. Fixed bug GH-12621 (browscap segmentation fault when configured in the
1414
vhost). (nielsdos)
15+
. Fixed bug GH-12655 (proc_open() does not take into account references
16+
in the descriptor array). (nielsdos)
1517

1618
- SQLite3:
1719
. Fixed bug GH-12633 (sqlite3_defensive.phpt fails with sqlite 3.44.0).

ext/standard/proc_open.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,7 @@ PHP_FUNCTION(proc_open)
10961096

10971097
descriptors[ndesc].index = (int)nindex;
10981098

1099+
ZVAL_DEREF(descitem);
10991100
if (Z_TYPE_P(descitem) == IS_RESOURCE) {
11001101
if (set_proc_descriptor_from_resource(descitem, &descriptors[ndesc], ndesc) == FAILURE) {
11011102
goto exit_fail;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
GH-12655 (proc_open(): Argument #2 ($descriptor_spec) must only contain arrays and streams [Descriptor item must be either an array or a File-Handle])
3+
--FILE--
4+
<?php
5+
6+
$descriptor_spec = [
7+
0 => [ "pipe", "r" ], // stdin is a pipe that the child will read from
8+
1 => [ "pipe", "w" ], // stdout is a pipe that the child will write to
9+
2 => [ "pipe", "w" ], // stderr is a file to write to
10+
];
11+
12+
foreach ( $descriptor_spec as $fd => &$d )
13+
{
14+
// don't do anything, just the fact that we used "&$d" will sink the ship!
15+
}
16+
17+
$proc = proc_open(PHP_BINARY, $descriptor_spec, $pipes);
18+
echo $proc === false ? "FAILED\n" : "SUCCEEDED\n";
19+
20+
?>
21+
--EXPECT--
22+
SUCCEEDED

0 commit comments

Comments
 (0)