dmitry          Thu Jun 21 12:42:36 2007 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/ext/standard       php_fopen_wrapper.c 
  Log:
  Proper fix for bug #39215 Inappropriate close of stdin/stdout/stderr 
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/php_fopen_wrapper.c?r1=1.45.2.4.2.6&r2=1.45.2.4.2.7&diff_format=u
Index: php-src/ext/standard/php_fopen_wrapper.c
diff -u php-src/ext/standard/php_fopen_wrapper.c:1.45.2.4.2.6 
php-src/ext/standard/php_fopen_wrapper.c:1.45.2.4.2.7
--- php-src/ext/standard/php_fopen_wrapper.c:1.45.2.4.2.6       Mon Jan  1 
09:36:08 2007
+++ php-src/ext/standard/php_fopen_wrapper.c    Thu Jun 21 12:42:36 2007
@@ -17,7 +17,7 @@
    |          Hartmut Holzgraefe <[EMAIL PROTECTED]>                       |
    +----------------------------------------------------------------------+
  */
-/* $Id: php_fopen_wrapper.c,v 1.45.2.4.2.6 2007/01/01 09:36:08 sebastian Exp $ 
*/
+/* $Id: php_fopen_wrapper.c,v 1.45.2.4.2.7 2007/06/21 12:42:36 dmitry Exp $ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -159,6 +159,7 @@
        php_stream * stream = NULL;
        char *p, *token, *pathdup;
        long max_memory;
+       FILE *file = NULL;
 
        if (!strncasecmp(path, "php://", 6)) {
                path += 6;
@@ -210,6 +211,7 @@
                                fd = dup(fd);
                        } else {
                                cli_in = 1;
+                               file = stdin;
                        }
                } else {
                        fd = dup(STDIN_FILENO);
@@ -222,6 +224,7 @@
                                fd = dup(fd);
                        } else {
                                cli_out = 1;
+                               file = stdout;
                        }
                } else {
                        fd = dup(STDOUT_FILENO);
@@ -234,6 +237,7 @@
                                fd = dup(fd);
                        } else {
                                cli_err = 1;
+                               file = stderr;
                        }
                } else {
                        fd = dup(STDERR_FILENO);
@@ -285,10 +289,14 @@
                /* failed to dup */
                return NULL;
        }
-       
-       stream = php_stream_fopen_from_fd(fd, mode, NULL);
-       if (stream == NULL) {
-               close(fd);
+
+       if (file) {
+               stream = php_stream_fopen_from_file(file, mode);
+       } else {        
+               stream = php_stream_fopen_from_fd(fd, mode, NULL);
+               if (stream == NULL) {
+                       close(fd);
+               }
        }
  
        return stream;

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to