]> granicus.if.org Git - php/commitdiff
Fixed bug #71323 - Output of stream_get_meta_data can be falsified by its input
authorStanislav Malyshev <stas@php.net>
Sun, 17 Jan 2016 06:10:54 +0000 (22:10 -0800)
committerStanislav Malyshev <stas@php.net>
Sun, 17 Jan 2016 06:10:54 +0000 (22:10 -0800)
15 files changed:
ext/standard/streamsfuncs.c
ext/standard/tests/streams/bug71323.phpt [new file with mode: 0644]
ext/standard/tests/streams/stream_get_meta_data_dir_basic.phpt
ext/standard/tests/streams/stream_get_meta_data_file_basic.phpt
ext/standard/tests/streams/stream_get_meta_data_file_variation1.phpt
ext/standard/tests/streams/stream_get_meta_data_file_variation2.phpt
ext/standard/tests/streams/stream_get_meta_data_file_variation4.phpt
ext/standard/tests/streams/stream_get_meta_data_file_variation5.phpt
ext/standard/tests/streams/stream_get_meta_data_process_basic.phpt
ext/standard/tests/streams/stream_get_meta_data_socket_basic.phpt
ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt
ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt
ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt
ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt
main/streams/memory.c

index 4c2837e28ce80a084cd981d244f96bc45142bb82..d11f1110e89ce487898e1608c14e797dd49b89fc 100644 (file)
@@ -496,6 +496,12 @@ PHP_FUNCTION(stream_get_meta_data)
 
        array_init(return_value);
 
+       if (!php_stream_populate_meta_data(stream, return_value)) {
+               add_assoc_bool(return_value, "timed_out", 0);
+               add_assoc_bool(return_value, "blocked", 1);
+               add_assoc_bool(return_value, "eof", php_stream_eof(stream));
+       }
+
        if (stream->wrapperdata) {
                MAKE_STD_ZVAL(newval);
                MAKE_COPY_ZVAL(&stream->wrapperdata, newval);
@@ -531,12 +537,6 @@ PHP_FUNCTION(stream_get_meta_data)
                add_assoc_string(return_value, "uri", stream->orig_path, 1);
        }
 
-       if (!php_stream_populate_meta_data(stream, return_value)) {
-               add_assoc_bool(return_value, "timed_out", 0);
-               add_assoc_bool(return_value, "blocked", 1);
-               add_assoc_bool(return_value, "eof", php_stream_eof(stream));
-       }
-
 }
 /* }}} */
 
@@ -696,7 +696,7 @@ static int stream_array_from_fd_set(zval *stream_array, fd_set *fds TSRMLS_DC)
                                } else { /* HASH_KEY_IS_STRING */
                                        zend_hash_update(new_hash, key, key_len, (void *)elem, sizeof(zval *), (void **)&dest_elem);
                                }
-                               
+
                                if (dest_elem) {
                                        zval_add_ref(dest_elem);
                                }
@@ -1453,7 +1453,7 @@ PHP_FUNCTION(stream_set_chunk_size)
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "The chunk size must be a positive integer, given %ld", csize);
                RETURN_FALSE;
        }
-       /* stream.chunk_size is actually a size_t, but php_stream_set_option 
+       /* stream.chunk_size is actually a size_t, but php_stream_set_option
         * can only use an int to accept the new value and return the old one.
         * In any case, values larger than INT_MAX for a chunk size make no sense.
         */
@@ -1461,11 +1461,11 @@ PHP_FUNCTION(stream_set_chunk_size)
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "The chunk size cannot be larger than %d", INT_MAX);
                RETURN_FALSE;
        }
-       
+
        php_stream_from_zval(stream, &zstream);
 
        ret = php_stream_set_option(stream, PHP_STREAM_OPTION_SET_CHUNK_SIZE, (int)csize, NULL);
-       
+
        RETURN_LONG(ret > 0 ? (long)ret : (long)EOF);
 }
 /* }}} */
diff --git a/ext/standard/tests/streams/bug71323.phpt b/ext/standard/tests/streams/bug71323.phpt
new file mode 100644 (file)
index 0000000..dfe0bd8
--- /dev/null
@@ -0,0 +1,31 @@
+--TEST--
+Bug #71323: Output of stream_get_meta_data can be falsified by its input
+--FILE--
+<?php
+$file = 'data:text/plain;z=y;uri=eviluri;mediatype=wut?;mediatype2=hello,somedata';
+$meta = stream_get_meta_data(fopen($file, "r"));
+var_dump($meta);
+?>
+--EXPECTF--
+array(10) {
+  ["mediatype"]=>
+  string(10) "text/plain"
+  ["z"]=>
+  string(1) "y"
+  ["uri"]=>
+  string(72) "data:text/plain;z=y;uri=eviluri;mediatype=wut?;mediatype2=hello,somedata"
+  ["mediatype2"]=>
+  string(5) "hello"
+  ["base64"]=>
+  bool(false)
+  ["wrapper_type"]=>
+  string(7) "RFC2397"
+  ["stream_type"]=>
+  string(7) "RFC2397"
+  ["mode"]=>
+  string(1) "r"
+  ["unread_bytes"]=>
+  int(0)
+  ["seekable"]=>
+  bool(true)
+}
index f46c8fd70b64761cec24b564f203a93daae67dc2..6658d69a4bae3b483bb0e4ead089eb87c87efa4a 100644 (file)
@@ -13,6 +13,12 @@ var_dump(stream_get_meta_data($dirObject->handle));
 ?>
 --EXPECT--
 array(8) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -23,14 +29,14 @@ array(8) {
   int(0)
   ["seekable"]=>
   bool(true)
+}
+array(8) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(8) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -41,10 +47,4 @@ array(8) {
   int(0)
   ["seekable"]=>
   bool(true)
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
index 4758c750f95b71863d6266a3da405c9dad3ddb4a..bad5987990f9c793a454f8a555b09d030ceb5c15 100644 (file)
@@ -12,6 +12,12 @@ fclose($fp);
 ?>
 --EXPECTF--
 array(9) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -24,10 +30,4 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%sstream_get_meta_data_file_basic.php"
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
index 572653e3db89fd9eb5d2e0f5a4119db03c3b709a..d54eb04410d79e9b1a20ccf7e57d7d37319a6f53 100644 (file)
@@ -29,6 +29,12 @@ unlink($filename);
 ?>
 --EXPECTF--
 array(9) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -41,14 +47,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -61,14 +67,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -81,14 +87,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -101,14 +107,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -121,14 +127,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -141,14 +147,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -161,14 +167,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -181,14 +187,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -201,14 +207,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -221,14 +227,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -241,14 +247,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -261,14 +267,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -281,14 +287,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -301,14 +307,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -321,14 +327,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -341,14 +347,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -361,14 +367,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -381,14 +387,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -401,14 +407,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -421,14 +427,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -441,14 +447,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -461,14 +467,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -481,14 +487,14 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -501,10 +507,4 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
index d186cb7e9b1a2f1434c28a539d862f5e47ffef92..6b3fde203a565d56c30b2f019d5f5833151b7d16 100644 (file)
@@ -43,6 +43,12 @@ unlink($filename);
 --EXPECTF--
 Write some data to the file:
 array(9) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -55,12 +61,6 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
 
 
@@ -68,6 +68,12 @@ Read a line of the file, causing data to be buffered:
 string(15) "a line of data
 "
 array(9) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -80,17 +86,17 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
+}
+
+
+Read 20 bytes from the file:
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-
-
-Read 20 bytes from the file:
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -103,17 +109,17 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
 
 
 Read entire file:
 array(9) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(true)
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -126,10 +132,4 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s.tmp"
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(true)
 }
index c51d9bd087243a7a84b649dd8d9df46f95bc1ce5..46a5ba5b370d8eb0d31c48f92575f7df1c70f045 100644 (file)
@@ -28,6 +28,12 @@ unlink($filename);
 --EXPECTF--
 Create a file:
 array(9) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -40,16 +46,16 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "File://%sstream_get_meta_data_file_variation4.php.tmp"
+}
+
+Change to file's directory and open with a relative path:
+array(9) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-
-Change to file's directory and open with a relative path:
-array(9) {
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -62,10 +68,4 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "stream_get_meta_data_file_variation4.php.tmp"
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
index 386b92f4217076a85ce99bf2e953b7f09e606978..22fcee4b6f34f3e9fea86b8fe90df1072f3f5956 100644 (file)
@@ -33,6 +33,12 @@ unlink($filename);
 --EXPECTF--
 Write some data to the file:
 array(9) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -45,17 +51,17 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s"
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
 
 
 Read entire file:
 array(9) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(true)
   ["wrapper_type"]=>
   string(9) "plainfile"
   ["stream_type"]=>
@@ -68,10 +74,4 @@ array(9) {
   bool(true)
   ["uri"]=>
   string(%i) "%s"
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(true)
 }
index 3f4dfbc43a5b8789c2a041269a19305e2ac21812..b7ab37c7c58c78fcef6e29742958b5abbba7f8cc 100644 (file)
@@ -18,6 +18,12 @@ echo "Done";
 ?>
 --EXPECT--
 array(7) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["stream_type"]=>
   string(5) "STDIO"
   ["mode"]=>
@@ -26,11 +32,5 @@ array(7) {
   int(0)
   ["seekable"]=>
   bool(false)
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
 Done
index 86056114b877c1c4de2d0e99f2b20e6bb9e89217..c5136ab03bf32bd43f722c08a94512bc723e091f 100644 (file)
@@ -10,6 +10,12 @@ fclose($tcp_socket);
 ?>
 --EXPECTF--
 array(7) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -18,10 +24,4 @@ array(7) {
   int(0)
   ["seekable"]=>
   bool(false)
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
index 16b38d9a1bb832b758f98453c526403c4a02dd57..18d6a4a3997e2307f9de978000f61ed667ed6fd5 100644 (file)
@@ -39,6 +39,12 @@ var_dump(stream_get_meta_data($client));
 --EXPECTF--
 Write some data:
 array(7) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -47,17 +53,17 @@ array(7) {
   int(0)
   ["seekable"]=>
   bool(false)
+}
+
+
+Read a line from the client, causing data to be buffered:
+array(7) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-
-
-Read a line from the client, causing data to be buffered:
-array(7) {
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -66,17 +72,17 @@ array(7) {
   int(15)
   ["seekable"]=>
   bool(false)
+}
+
+
+Read 3 bytes of data from the client:
+array(7) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-
-
-Read 3 bytes of data from the client:
-array(7) {
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -85,17 +91,17 @@ array(7) {
   int(12)
   ["seekable"]=>
   bool(false)
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
 
 
 Close the server side socket and read the remaining data from the client:
 array(7) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(true)
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -104,10 +110,4 @@ array(7) {
   int(0)
   ["seekable"]=>
   bool(false)
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(true)
 }
index d30fec7056ae7b7269c7c4fde4f025797f254c87..712a661b73527940b2e587ec0e7c7c60d512e3a4 100644 (file)
@@ -37,25 +37,12 @@ fclose($server);
 ?>
 --EXPECTF--
 array(7) {
-  ["stream_type"]=>
-  string(%d) "tcp_socke%s"
-  ["mode"]=>
-  string(2) "r+"
-  ["unread_bytes"]=>
-  int(0)
-  ["seekable"]=>
-  bool(false)
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-
-
-Set a timeout on the client and attempt a read:
-array(7) {
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -64,17 +51,17 @@ array(7) {
   int(0)
   ["seekable"]=>
   bool(false)
+}
+
+
+Set a timeout on the client and attempt a read:
+array(7) {
   ["timed_out"]=>
   bool(true)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-
-
-Write some data from the server:
-array(7) {
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -83,17 +70,17 @@ array(7) {
   int(0)
   ["seekable"]=>
   bool(false)
+}
+
+
+Write some data from the server:
+array(7) {
   ["timed_out"]=>
   bool(true)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-
-
-Read some data from the client:
-array(7) {
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -102,10 +89,23 @@ array(7) {
   int(0)
   ["seekable"]=>
   bool(false)
+}
+
+
+Read some data from the client:
+array(7) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
+  ["stream_type"]=>
+  string(%d) "tcp_socke%s"
+  ["mode"]=>
+  string(2) "r+"
+  ["unread_bytes"]=>
+  int(0)
+  ["seekable"]=>
+  bool(false)
 }
index 0b079ccf7c4a05745da934e7b82a961ab8f76c4f..419897337946764577e70f1a9e2a5a21e0f0f8bf 100644 (file)
@@ -32,6 +32,12 @@ fclose($server);
 ?>
 --EXPECTF--
 array(7) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -40,18 +46,18 @@ array(7) {
   int(0)
   ["seekable"]=>
   bool(false)
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
 
 
 Set blocking to false:
 bool(true)
 array(7) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(false)
+  ["eof"]=>
+  bool(false)
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -60,18 +66,18 @@ array(7) {
   int(0)
   ["seekable"]=>
   bool(false)
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(false)
-  ["eof"]=>
-  bool(false)
 }
 
 
 Set blocking to true:
 bool(true)
 array(7) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -80,10 +86,4 @@ array(7) {
   int(0)
   ["seekable"]=>
   bool(false)
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
index f9ef747987331cd8d24275ebc32b32d456121e51..50d7ddfb8842b380132a04a89606496a0f8c45d0 100644 (file)
@@ -37,6 +37,12 @@ fclose($client);
 --EXPECTF--
 Write some data:
 array(7) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(false)
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -45,17 +51,17 @@ array(7) {
   int(%i)
   ["seekable"]=>
   bool(false)
+}
+
+
+Read a line from the client:
+array(7) {
   ["timed_out"]=>
   bool(false)
   ["blocked"]=>
   bool(true)
   ["eof"]=>
   bool(false)
-}
-
-
-Read a line from the client:
-array(7) {
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -64,17 +70,17 @@ array(7) {
   int(%i)
   ["seekable"]=>
   bool(false)
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(false)
 }
 
 
 Close the server side socket and read the remaining data from the client:
 array(7) {
+  ["timed_out"]=>
+  bool(false)
+  ["blocked"]=>
+  bool(true)
+  ["eof"]=>
+  bool(true)
   ["stream_type"]=>
   string(%d) "tcp_socke%s"
   ["mode"]=>
@@ -83,10 +89,4 @@ array(7) {
   int(%i)
   ["seekable"]=>
   bool(false)
-  ["timed_out"]=>
-  bool(false)
-  ["blocked"]=>
-  bool(true)
-  ["eof"]=>
-  bool(true)
 }
index d0f2511aa709a6066a53256a51f2dddb969c5707..eb31db3c4483dc89efdcf4453b02dd46b7fce25f 100644 (file)
@@ -209,7 +209,7 @@ static int php_stream_memory_stat(php_stream *stream, php_stream_statbuf *ssb TS
 
        memset(ssb, 0, sizeof(php_stream_statbuf));
        /* read-only across the board */
-       
+
        ssb->sb.st_mode = ms->mode & TEMP_STREAM_READONLY ? 0444 : 0666;
 
        ssb->sb.st_size = ms->fsize;
@@ -248,7 +248,7 @@ static int php_stream_memory_set_option(php_stream *stream, int option, int valu
 {
        php_stream_memory_data *ms = (php_stream_memory_data*)stream->abstract;
        size_t newsize;
-       
+
        switch(option) {
                case PHP_STREAM_OPTION_TRUNCATE_API:
                        switch (value) {
@@ -277,7 +277,7 @@ static int php_stream_memory_set_option(php_stream *stream, int option, int valu
        }
 }
 /* }}} */
-       
+
 PHPAPI php_stream_ops  php_stream_memory_ops = {
        php_stream_memory_write, php_stream_memory_read,
        php_stream_memory_close, php_stream_memory_flush,
@@ -301,7 +301,7 @@ PHPAPI php_stream *_php_stream_memory_create(int mode STREAMS_DC TSRMLS_DC)
        self->fsize = 0;
        self->smax = ~0u;
        self->mode = mode;
-       
+
        stream = php_stream_alloc_rel(&php_stream_memory_ops, self, 0, mode & TEMP_STREAM_READONLY ? "rb" : "w+b");
        stream->flags |= PHP_STREAM_FLAG_NO_BUFFER;
        return stream;
@@ -317,7 +317,7 @@ PHPAPI php_stream *_php_stream_memory_open(int mode, char *buf, size_t length ST
 
        if ((stream = php_stream_memory_create_rel(mode)) != NULL) {
                ms = (php_stream_memory_data*)stream->abstract;
-               
+
                if (mode == TEMP_STREAM_READONLY || mode == TEMP_STREAM_TAKE_BUFFER) {
                        /* use the buffer directly */
                        ms->data = buf;
@@ -400,11 +400,11 @@ static size_t php_stream_temp_read(php_stream *stream, char *buf, size_t count T
        if (!ts->innerstream) {
                return -1;
        }
-       
+
        got = php_stream_read(ts->innerstream, buf, count);
-       
+
        stream->eof = ts->innerstream->eof;
-       
+
        return got;
 }
 /* }}} */
@@ -423,7 +423,7 @@ static int php_stream_temp_close(php_stream *stream, int close_handle TSRMLS_DC)
        } else {
                ret = 0;
        }
-       
+
        if (ts->meta) {
                zval_ptr_dtor(&ts->meta);
        }
@@ -461,7 +461,7 @@ static int php_stream_temp_seek(php_stream *stream, off_t offset, int whence, of
        ret = php_stream_seek(ts->innerstream, offset, whence);
        *newoffs = php_stream_tell(ts->innerstream);
        stream->eof = ts->innerstream->eof;
-       
+
        return ret;
 }
 /* }}} */
@@ -503,7 +503,7 @@ static int php_stream_temp_cast(php_stream *stream, int castas, void **ret TSRML
        file = php_stream_fopen_tmpfile();
        php_stream_write(file, membuf, memsize);
        pos = php_stream_tell(ts->innerstream);
-       
+
        php_stream_free_enclosed(ts->innerstream, PHP_STREAM_FREE_CLOSE);
        ts->innerstream = file;
        php_stream_encloses(stream, ts->innerstream);
@@ -527,7 +527,7 @@ static int php_stream_temp_stat(php_stream *stream, php_stream_statbuf *ssb TSRM
 static int php_stream_temp_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC) /* {{{ */
 {
        php_stream_temp_data *ts = (php_stream_temp_data*)stream->abstract;
-       
+
        switch(option) {
                case PHP_STREAM_OPTION_META_DATA_API:
                        if (ts->meta) {
@@ -639,7 +639,7 @@ static php_stream * php_stream_url_wrap_rfc2397(php_stream_wrapper *wrapper, cha
                dlen -= mlen;
                semi = memchr(path, ';', mlen);
                sep = memchr(path, '/', mlen);
-               
+
                if (!semi && !sep) {
                        php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "rfc2397: illegal media type");
                        return NULL;
@@ -682,7 +682,9 @@ static php_stream * php_stream_url_wrap_rfc2397(php_stream_wrapper *wrapper, cha
                        plen = sep - path;
                        vlen = (semi ? semi - sep : mlen - plen) - 1 /* '=' */;
                        key = estrndup(path, plen);
-                       add_assoc_stringl_ex(meta, key, plen + 1, sep + 1, vlen, 1);
+                       if (plen != sizeof("mediatype")-1 || memcmp(key, "mediatype", sizeof("mediatype")-1)) {
+                               add_assoc_stringl_ex(meta, key, plen + 1, sep + 1, vlen, 1);
+                       }
                        efree(key);
                        plen += vlen + 1;
                        mlen -= plen;