]> granicus.if.org Git - php/commitdiff
- Fixed bug #43510 (stream_get_meta_data() does not return same mode as used in fopen)
authorJani Taskinen <jani@php.net>
Sat, 1 Aug 2009 03:17:31 +0000 (03:17 +0000)
committerJani Taskinen <jani@php.net>
Sat, 1 Aug 2009 03:17:31 +0000 (03:17 +0000)
ext/standard/http_fopen_wrapper.c
ext/standard/tests/http/bug43510.phpt [new file with mode: 0644]

index c36f75b4c4458f66a540c1cf5b328493a754ed8d..840011edb6aae3190e18ebebb67d88a62537ebe5 100644 (file)
@@ -369,7 +369,6 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
                strlcat(scratch, " HTTP/1.0\r\n", scratch_len);
        }
 
-
        /* send it */
        php_stream_write(stream, scratch, strlen(scratch));
 
@@ -825,6 +824,7 @@ out:
                        stream->wrapperdata = response_header;
                }
                php_stream_notify_progress_init(context, 0, file_size);
+               
                /* Restore original chunk size now that we're done with headers */
                if (options & STREAM_WILL_CAST)
                        php_stream_set_chunk_size(stream, chunk_size);
@@ -836,6 +836,9 @@ out:
                 * the stream */
                stream->position = 0;
 
+               /* restore mode */
+               strlcpy(stream->mode, mode, sizeof(stream->mode));
+
                if (transfer_encoding) {
                        php_stream_filter_append(&stream->readfilters, transfer_encoding);
                }
diff --git a/ext/standard/tests/http/bug43510.phpt b/ext/standard/tests/http/bug43510.phpt
new file mode 100644 (file)
index 0000000..5a136f3
--- /dev/null
@@ -0,0 +1,84 @@
+--TEST--
+Bug #43510: stream_get_meta_data() does not return same mode as used in fopen
+--SKIPIF--
+<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?>
+--FILE--
+<?php
+require 'server.inc';
+
+$responses = array(
+       "data://text/plain,HTTP/1.0 200 OK\r\n\r\n",
+       "data://text/plain,HTTP/1.0 200 OK\r\n\r\n",
+);
+
+$pid = http_server("tcp://127.0.0.1:12342", $responses, $output);
+
+foreach(array('r', 'rb') as $mode) {
+       $fd = fopen('http://127.0.0.1:12342/', $mode, false);
+       $meta = stream_get_meta_data($fd);
+       var_dump($meta['mode']);
+       fclose($fd);
+}
+
+http_server_kill($pid);
+
+?>
+--EXPECT--
+string(1) "r"
+string(2) "rb"
+--TEST--
+Bug #43510: stream_get_meta_data() does not return same mode as used in fopen
+--SKIPIF--
+<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?>
+--FILE--
+<?php
+require 'server.inc';
+
+$responses = array(
+       "data://text/plain,HTTP/1.0 200 OK\r\n\r\n",
+       "data://text/plain,HTTP/1.0 200 OK\r\n\r\n",
+);
+
+$pid = http_server("tcp://127.0.0.1:12342", $responses, $output);
+
+foreach(array('r', 'rb') as $mode) {
+       $fd = fopen('http://127.0.0.1:12342/', $mode, false);
+       $meta = stream_get_meta_data($fd);
+       var_dump($meta['mode']);
+       fclose($fd);
+}
+
+http_server_kill($pid);
+
+?>
+--EXPECT--
+string(1) "r"
+string(2) "rb"
+--TEST--
+Bug #43510: stream_get_meta_data() does not return same mode as used in fopen
+--SKIPIF--
+<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?>
+--FILE--
+<?php
+require 'server.inc';
+
+$responses = array(
+       "data://text/plain,HTTP/1.0 200 OK\r\n\r\n",
+       "data://text/plain,HTTP/1.0 200 OK\r\n\r\n",
+);
+
+$pid = http_server("tcp://127.0.0.1:12342", $responses, $output);
+
+foreach(array('r', 'rb') as $mode) {
+       $fd = fopen('http://127.0.0.1:12342/', $mode, false);
+       $meta = stream_get_meta_data($fd);
+       var_dump($meta['mode']);
+       fclose($fd);
+}
+
+http_server_kill($pid);
+
+?>
+--EXPECT--
+string(1) "r"
+string(2) "rb"