]> granicus.if.org Git - php/commitdiff
MFH:- Fixed bug #44667 (proc_open does not handle pipes with the mode "wb" correctly)
authorJani Taskinen <jani@php.net>
Tue, 8 Apr 2008 08:42:24 +0000 (08:42 +0000)
committerJani Taskinen <jani@php.net>
Tue, 8 Apr 2008 08:42:24 +0000 (08:42 +0000)
ext/standard/proc_open.c
ext/standard/tests/general_functions/bug44667.phpt [new file with mode: 0644]

index a9a2762caa9515440c7b12fccb21e6ed7aa24a5a..cd4c7b70e0e74ffe8adab983b37dd92677dec519 100644 (file)
@@ -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 (file)
index 0000000..49183cc
--- /dev/null
@@ -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