cvs: php-src /ext/standard php_fopen_wrapper.c

From: Date: Fri, 03 Nov 2006 13:34:39 +0000
Subject: cvs: php-src /ext/standard php_fopen_wrapper.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-41295@lists.php.net to get a copy of this message
iliaa Fri Nov 3 13:34:39 2006 UTC Modified files: /php-src/ext/standard php_fopen_wrapper.c Log: MFB: Fixed bug #39215 (Inappropriate close of stdin/stdout/stderr). http://cvs.php.net/viewvc.cgi/php-src/ext/standard/php_fopen_wrapper.c?r1=1.54&r2=1.55&diff_format=u Index: php-src/ext/standard/php_fopen_wrapper.c diff -u php-src/ext/standard/php_fopen_wrapper.c:1.54 php-src/ext/standard/php_fopen_wrapper.c:1.55 --- php-src/ext/standard/php_fopen_wrapper.c:1.54 Tue May 16 14:12:52 2006 +++ php-src/ext/standard/php_fopen_wrapper.c Fri Nov 3 13:34:39 2006 @@ -17,7 +17,7 @@ | Hartmut Holzgraefe <hholzgra@php.net> | +----------------------------------------------------------------------+ */ -/* $Id: php_fopen_wrapper.c,v 1.54 2006/05/16 14:12:52 iliaa Exp $ */ +/* $Id: php_fopen_wrapper.c,v 1.55 2006/11/03 13:34:39 iliaa Exp $ */ #include <stdio.h> #include <stdlib.h> @@ -191,11 +191,41 @@ } if (!strcasecmp(path, "stdin")) { - fd = !strcmp(sapi_module.name, "cli") ? STDIN_FILENO : dup(STDIN_FILENO); + if (!strcmp(sapi_module.name, "cli")) { + static int cli_in = 0; + fd = STDIN_FILENO; + if (cli_in) { + fd = dup(fd); + } else { + cli_in = 1; + } + } else { + fd = dup(STDIN_FILENO); + } } else if (!strcasecmp(path, "stdout")) { - fd = !strcmp(sapi_module.name, "cli") ? STDOUT_FILENO : dup(STDOUT_FILENO); + if (!strcmp(sapi_module.name, "cli")) { + static int cli_out = 0; + fd = STDOUT_FILENO; + if (cli_out++) { + fd = dup(fd); + } else { + cli_out = 1; + } + } else { + fd = dup(STDOUT_FILENO); + } } else if (!strcasecmp(path, "stderr")) { - fd = !strcmp(sapi_module.name, "cli") ? STDERR_FILENO : dup(STDERR_FILENO); + if (!strcmp(sapi_module.name, "cli")) { + static int cli_err = 0; + fd = STDERR_FILENO; + if (cli_err++) { + fd = dup(fd); + } else { + cli_err = 1; + } + } else { + fd = dup(STDERR_FILENO); + } } else if (!strncasecmp(path, "filter/", 7)) { /* Save time/memory when chain isn't specified */ if (strchr(mode, 'r') || strchr(mode, '+')) {

« previous php.cvs (#41295) next »