jani Sat, 01 Aug 2009 03:17:31 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=286613
Log: - Fixed bug #43510 (stream_get_meta_data() does not return same mode as used in fopen) Bug: http://bugs.php.net/43510 (Assigned) stream_get_meta_data() does not return same mode as used in fopen Changed paths: U php/php-src/branches/PHP_5_2/NEWS U php/php-src/branches/PHP_5_2/ext/standard/http_fopen_wrapper.c A php/php-src/branches/PHP_5_2/ext/standard/tests/http/bug43510.phpt U php/php-src/branches/PHP_5_3/NEWS U php/php-src/branches/PHP_5_3/ext/standard/http_fopen_wrapper.c A php/php-src/branches/PHP_5_3/ext/standard/tests/http/bug43510.phpt U php/php-src/trunk/ext/standard/http_fopen_wrapper.c A php/php-src/trunk/ext/standard/tests/http/bug43510.phpt
Modified: php/php-src/branches/PHP_5_2/NEWS =================================================================== --- php/php-src/branches/PHP_5_2/NEWS 2009-08-01 03:08:53 UTC (rev 286612) +++ php/php-src/branches/PHP_5_2/NEWS 2009-08-01 03:17:31 UTC (rev 286613) @@ -75,6 +75,8 @@ - Fixed bug #45141 (setcookie will output expires years of >4 digits). (Ilia) - Fixed bug #44144 (spl_autoload_functions() should return object instance when appropriate). (Hannes, Etienne) +- Fixed bug #43510 (stream_get_meta_data() does not return same mode as used + in fopen). (Jani) - Fixed bug #42434 (ImageLine w/ antialias = 1px shorter). (wojjie at gmail dot com, Kalle) Modified: php/php-src/branches/PHP_5_2/ext/standard/http_fopen_wrapper.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/standard/http_fopen_wrapper.c 2009-08-01 03:08:53 UTC (rev 286612) +++ php/php-src/branches/PHP_5_2/ext/standard/http_fopen_wrapper.c 2009-08-01 03:17:31 UTC (rev 286613) @@ -325,7 +325,6 @@ strlcat(scratch, " HTTP/1.0\r\n", scratch_len); } - /* send it */ php_stream_write(stream, scratch, strlen(scratch)); @@ -756,6 +755,8 @@ * the stream */ stream->position = 0; + /* restore mode */ + strlcpy(stream->mode, mode, sizeof(stream->mode)); } return stream; Added: php/php-src/branches/PHP_5_2/ext/standard/tests/http/bug43510.phpt =================================================================== --- php/php-src/branches/PHP_5_2/ext/standard/tests/http/bug43510.phpt (rev 0) +++ php/php-src/branches/PHP_5_2/ext/standard/tests/http/bug43510.phpt 2009-08-01 03:17:31 UTC (rev 286613) @@ -0,0 +1,28 @@ +--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" Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2009-08-01 03:08:53 UTC (rev 286612) +++ php/php-src/branches/PHP_5_3/NEWS 2009-08-01 03:17:31 UTC (rev 286613) @@ -96,6 +96,8 @@ - Fixed bug #48182 (ssl handshake fails during asynchronous socket connection). (Sriram Natarajan) - Fixed bug #45554 (Inconsistent behavior of the u format char). (Derick) +- Fixed bug #43510 (stream_get_meta_data() does not return same mode as used + in fopen). (Jani) - Fixed bug #42434 (ImageLine w/ antialias = 1px shorter). (wojjie at gmail dot com, Kalle) Modified: php/php-src/branches/PHP_5_3/ext/standard/http_fopen_wrapper.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/standard/http_fopen_wrapper.c 2009-08-01 03:08:53 UTC (rev 286612) +++ php/php-src/branches/PHP_5_3/ext/standard/http_fopen_wrapper.c 2009-08-01 03:17:31 UTC (rev 286613) @@ -326,7 +326,6 @@ strlcat(scratch, " HTTP/1.0\r\n", scratch_len); } - /* send it */ php_stream_write(stream, scratch, strlen(scratch)); @@ -772,6 +771,7 @@ 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); @@ -783,6 +783,9 @@ * 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); } Added: php/php-src/branches/PHP_5_3/ext/standard/tests/http/bug43510.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/standard/tests/http/bug43510.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/standard/tests/http/bug43510.phpt 2009-08-01 03:17:31 UTC (rev 286613) @@ -0,0 +1,56 @@ +--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" Modified: php/php-src/trunk/ext/standard/http_fopen_wrapper.c =================================================================== --- php/php-src/trunk/ext/standard/http_fopen_wrapper.c 2009-08-01 03:08:53 UTC (rev 286612) +++ php/php-src/trunk/ext/standard/http_fopen_wrapper.c 2009-08-01 03:17:31 UTC (rev 286613) @@ -369,7 +369,6 @@ strlcat(scratch, " HTTP/1.0\r\n", scratch_len); } - /* send it */ php_stream_write(stream, scratch, strlen(scratch)); @@ -825,6 +824,7 @@ 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 @@ * 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); } Added: php/php-src/trunk/ext/standard/tests/http/bug43510.phpt =================================================================== --- php/php-src/trunk/ext/standard/tests/http/bug43510.phpt (rev 0) +++ php/php-src/trunk/ext/standard/tests/http/bug43510.phpt 2009-08-01 03:17:31 UTC (rev 286613) @@ -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"
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php