dmitry Thu Jun 21 12:42:58 2007 UTC
Modified files:
/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.59&r2=1.60&diff_format=u
Index: php-src/ext/standard/php_fopen_wrapper.c
diff -u php-src/ext/standard/php_fopen_wrapper.c:1.59
php-src/ext/standard/php_fopen_wrapper.c:1.60
--- php-src/ext/standard/php_fopen_wrapper.c:1.59 Wed Jan 24 21:43:47 2007
+++ php-src/ext/standard/php_fopen_wrapper.c Thu Jun 21 12:42:58 2007
@@ -17,7 +17,7 @@
| Hartmut Holzgraefe <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_fopen_wrapper.c,v 1.59 2007/01/24 21:43:47 pollita Exp $ */
+/* $Id: php_fopen_wrapper.c,v 1.60 2007/06/21 12:42:58 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;
@@ -212,6 +213,7 @@
fd = dup(fd);
} else {
cli_in = 1;
+ file = stdin;
}
} else {
fd = dup(STDIN_FILENO);
@@ -224,6 +226,7 @@
fd = dup(fd);
} else {
cli_out = 1;
+ file = stdout;
}
} else {
fd = dup(STDOUT_FILENO);
@@ -236,6 +239,7 @@
fd = dup(fd);
} else {
cli_err = 1;
+ file = stderr;
}
} else {
fd = dup(STDERR_FILENO);
@@ -287,10 +291,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