summaryrefslogtreecommitdiff
path: root/ext/standard
diff options
context:
space:
mode:
authorJani Taskinen <jani@php.net>2008-04-08 08:45:52 +0000
committerJani Taskinen <jani@php.net>2008-04-08 08:45:52 +0000
commita9f25877163db18c1600cb185e04af34aed9f0bb (patch)
tree959481eb5bcd0fe729215b9784379f1fc63e1416 /ext/standard
parent5f7df8099a3dda0d356c5c65513bf9f71f8c701a (diff)
downloadphp-git-a9f25877163db18c1600cb185e04af34aed9f0bb.tar.gz
MFH: - Fixed bug #44667 (proc_open() does not handle pipes with the mode "wb" correctly)
Diffstat (limited to 'ext/standard')
-rw-r--r--ext/standard/proc_open.c2
-rw-r--r--ext/standard/tests/general_functions/bug44667.phpt33
2 files changed, 34 insertions, 1 deletions
diff --git a/ext/standard/proc_open.c b/ext/standard/proc_open.c
index a9a2762caa..cd4c7b70e0 100644
--- a/ext/standard/proc_open.c
+++ b/ext/standard/proc_open.c
@@ -624,7 +624,7 @@ PHP_FUNCTION(proc_open)
goto exit_fail;
}
- if (strcmp(Z_STRVAL_PP(zmode), "w") != 0) {
+ if (strncmp(Z_STRVAL_PP(zmode), "w", 1) != 0) {
descriptors[ndesc].parentend = newpipe[1];
descriptors[ndesc].childend = newpipe[0];
descriptors[ndesc].mode |= DESC_PARENT_MODE_WRITE;
diff --git a/ext/standard/tests/general_functions/bug44667.phpt b/ext/standard/tests/general_functions/bug44667.phpt
new file mode 100644
index 0000000000..49183cc580
--- /dev/null
+++ b/ext/standard/tests/general_functions/bug44667.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #44667 (proc_open() does not handle pipes with the mode 'wb' correctly)
+--SKIPIF--
+<?php if (!is_executable('/bin/cat')) echo 'skip cat not found'; ?>
+--FILE--
+<?php
+
+$pipes = array();
+
+$descriptor_spec = array(
+ 0 => array('pipe', 'rb'),
+ 1 => array('pipe', 'wb'),
+);
+
+$proc = proc_open('cat', $descriptor_spec, $pipes);
+
+fwrite($pipes[0], 'Hello', 5);
+fflush($pipes[0]);
+fclose($pipes[0]);
+
+$result = fread($pipes[1], 5);
+fclose($pipes[1]);
+
+proc_close($proc);
+
+echo "Result is: ", $result, "\n";
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Result is: Hello
+Done