Bug #69290 [Fbk]: Invalid modes do not trigger errors

From: Date: Wed, 25 Mar 2015 20:41:03 +0000
Subject: Bug #69290 [Fbk]: Invalid modes do not trigger errors
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-191607@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=69290&edit=1

 ID:                 69290
 Updated by:         cmb@php.net
 Reported by:        roborg at gmail dot com
 Summary:            Invalid modes do not trigger errors
 Status:             Feedback
 Type:               Bug
 Package:            Program Execution
 Operating System:   Windows
 PHP Version:        5.5.23
 Block user comment: N
 Private report:     N

 New Comment:

This code has not been changed since 2003[1], so it's somewhat
unlikely that a BC break has been introduced in PHP 5.x.y. If you
can reproduce a behavioral change, please let us know (and change
the bug status back to "Open").

[1] <https://github.com/php/php-src/commit/1a314027d3c388a19a06ac370fa08a46d474e1bd#diff-19f692ed5f75687fc7bc1929910e540fR337>


Previous Comments:
------------------------------------------------------------------------
[2015-03-25 17:27:58] roborg at gmail dot com

I found the issue in my code because I was passing in "a" as recommended in http://php.net/proc_open#97012 and I wasn't getting
any output.

I'm pretty confident it used to work, so to me it seems BC has already been broken, as
it's changed from working to failing silently - I'd rather it changed from working to
giving an error (/warning/notice).

------------------------------------------------------------------------
[2015-03-25 09:29:53] laruence@php.net

in proc_open:

 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;
                } else {
                    descriptors[ndesc].parentend = newpipe[0];
                    descriptors[ndesc].childend = newpipe[1];
                }


so, it's very clear why no notice was raised(assume "r" by default). considering bc
issue, and not very helpful notices....

maybe change to a doc issue is better.

------------------------------------------------------------------------
[2015-03-24 15:52:53] roborg at gmail dot com

Description:
------------
Valid modes for pipes are "r" and "w" according to the docs.

Though a comment in the docs suggests using "a" for STDERR on Windows, I believe this may
be outdated.

Modes other than "r" and "w" (and possibly "a"?) should trigger an
error, but are silently ignored and the pipe just doesn't work properly.

Test script:
---------------
$descriptors = array(
	array('pipe', 'x'),
	array('pipe', 'y'),
	array('pipe', 'z'),
);
		
$process = proc_open('ls', $descriptors, $pipes);
proc_close($process);


Expected result:
----------------
Error: proc_open(): x is not a valid descriptor mode

Actual result:
--------------
(nothing)


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=69290&edit=1


Thread (10 messages)

« previous php.bugs (#191607) next »