]> granicus.if.org Git - php/commitdiff
- 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:05 +0000 (08:42 +0000)
committerJani Taskinen <jani@php.net>
Tue, 8 Apr 2008 08:42:05 +0000 (08:42 +0000)
ext/standard/proc_open.c
ext/standard/tests/general_functions/bug44667.phpt [new file with mode: 0644]

index 7c7c3ce096dc48fd6c330bfff2ae5572594fc03a..67dd956fa1b965bbf3074285c16b848d9f0adbf1 100644 (file)
@@ -600,7 +600,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