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

diff --git a/NEWS b/NEWS
index 78dda00fb18f318eb1e88198c6cc78e0a4d7cd4c..ffd0fbaa7b363b1947e396f4b72dedae84cfbb73 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,8 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? Apr 2008, PHP 5.2.6
+- Fixed bug #44667 (proc_open() does not handle pipes with the mode 'wb'
+  correctly). (Jani)
 - Fixed bug #44591 (imagegif's filename parameter). (Felipe)
 
 03 Apr 2008, PHP 5.2.6RC4
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