My Alpine packages repository.
https://dryabzhinsky.noip.me/packages/en/alpinelinux-support/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1319 lines
25 KiB
1319 lines
25 KiB
From 6297a117d77fa3a0df2e21ca926a92c231819cd5 Mon Sep 17 00:00:00 2001 |
|
From: Stanislav Malyshev <stas@php.net> |
|
Date: Sat, 16 Jan 2016 22:10:54 -0800 |
|
Subject: [PATCH] Fixed bug #71323 - Output of stream_get_meta_data can be |
|
falsified by its input |
|
|
|
[roberto@debian.org: backported to 5.4.45] |
|
|
|
Bug: https://bugs.php.net/bug.php?id=71323 |
|
Origin: backport, https://git.php.net/?p=php-src.git;a=commitdiff;h=6297a117d77fa3a0df2e21ca926a92c231819cd5 |
|
--- |
|
ext/standard/streamsfuncs.c | 20 ++-- |
|
ext/standard/tests/streams/bug71323.phpt | 31 ++++++ |
|
.../streams/stream_get_meta_data_dir_basic.phpt | 16 ++-- |
|
.../streams/stream_get_meta_data_file_basic.phpt | 12 +-- |
|
.../stream_get_meta_data_file_variation1.phpt | 104 ++++++++++----------- |
|
.../stream_get_meta_data_file_variation2.phpt | 46 ++++----- |
|
.../stream_get_meta_data_file_variation4.phpt | 20 ++-- |
|
.../stream_get_meta_data_file_variation5.phpt | 24 ++--- |
|
.../stream_get_meta_data_process_basic.phpt | 12 +-- |
|
.../streams/stream_get_meta_data_socket_basic.phpt | 12 +-- |
|
.../stream_get_meta_data_socket_variation1.phpt | 44 ++++----- |
|
.../stream_get_meta_data_socket_variation2.phpt | 46 ++++----- |
|
.../stream_get_meta_data_socket_variation3.phpt | 36 +++---- |
|
.../stream_get_meta_data_socket_variation4.phpt | 34 +++---- |
|
main/streams/memory.c | 30 +++--- |
|
15 files changed, 260 insertions(+), 227 deletions(-) |
|
create mode 100644 ext/standard/tests/streams/bug71323.phpt |
|
|
|
--- php5.git.orig/ext/standard/streamsfuncs.c |
|
+++ php5.git/ext/standard/streamsfuncs.c |
|
@@ -496,6 +496,12 @@ |
|
|
|
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 @@ |
|
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)); |
|
- } |
|
- |
|
} |
|
/* }}} */ |
|
|
|
@@ -697,7 +697,7 @@ |
|
} 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); |
|
} |
|
@@ -1454,7 +1454,7 @@ |
|
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. |
|
*/ |
|
@@ -1462,11 +1462,11 @@ |
|
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); |
|
} |
|
/* }}} */ |
|
--- /dev/null |
|
+++ php5.git/ext/standard/tests/streams/bug71323.phpt |
|
@@ -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) |
|
+} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_dir_basic.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_dir_basic.phpt |
|
@@ -13,6 +13,12 @@ |
|
?> |
|
--EXPECT-- |
|
array(8) { |
|
+ ["timed_out"]=> |
|
+ bool(false) |
|
+ ["blocked"]=> |
|
+ bool(true) |
|
+ ["eof"]=> |
|
+ bool(false) |
|
["wrapper_type"]=> |
|
string(9) "plainfile" |
|
["stream_type"]=> |
|
@@ -23,14 +29,14 @@ |
|
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 @@ |
|
int(0) |
|
["seekable"]=> |
|
bool(true) |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(false) |
|
} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_file_basic.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_file_basic.phpt |
|
@@ -12,6 +12,12 @@ |
|
?> |
|
--EXPECTF-- |
|
array(9) { |
|
+ ["timed_out"]=> |
|
+ bool(false) |
|
+ ["blocked"]=> |
|
+ bool(true) |
|
+ ["eof"]=> |
|
+ bool(false) |
|
["wrapper_type"]=> |
|
string(9) "plainfile" |
|
["stream_type"]=> |
|
@@ -24,10 +30,4 @@ |
|
bool(true) |
|
["uri"]=> |
|
string(%i) "%sstream_get_meta_data_file_basic.php" |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(false) |
|
} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_file_variation1.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_file_variation1.phpt |
|
@@ -29,6 +29,12 @@ |
|
?> |
|
--EXPECTF-- |
|
array(9) { |
|
+ ["timed_out"]=> |
|
+ bool(false) |
|
+ ["blocked"]=> |
|
+ bool(true) |
|
+ ["eof"]=> |
|
+ bool(false) |
|
["wrapper_type"]=> |
|
string(9) "plainfile" |
|
["stream_type"]=> |
|
@@ -41,14 +47,14 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
bool(true) |
|
["uri"]=> |
|
string(%i) "%s.tmp" |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(false) |
|
} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_file_variation2.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_file_variation2.phpt |
|
@@ -43,6 +43,12 @@ |
|
--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 @@ |
|
bool(true) |
|
["uri"]=> |
|
string(%i) "%s.tmp" |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(false) |
|
} |
|
|
|
|
|
@@ -68,6 +68,12 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
bool(true) |
|
["uri"]=> |
|
string(%i) "%s.tmp" |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(true) |
|
} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_file_variation4.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_file_variation4.phpt |
|
@@ -28,6 +28,12 @@ |
|
--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 @@ |
|
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 @@ |
|
bool(true) |
|
["uri"]=> |
|
string(%i) "stream_get_meta_data_file_variation4.php.tmp" |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(false) |
|
} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_file_variation5.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_file_variation5.phpt |
|
@@ -33,6 +33,12 @@ |
|
--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 @@ |
|
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 @@ |
|
bool(true) |
|
["uri"]=> |
|
string(%i) "%s" |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(true) |
|
} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_process_basic.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_process_basic.phpt |
|
@@ -18,6 +18,12 @@ |
|
?> |
|
--EXPECT-- |
|
array(7) { |
|
+ ["timed_out"]=> |
|
+ bool(false) |
|
+ ["blocked"]=> |
|
+ bool(true) |
|
+ ["eof"]=> |
|
+ bool(false) |
|
["stream_type"]=> |
|
string(5) "STDIO" |
|
["mode"]=> |
|
@@ -26,11 +32,5 @@ |
|
int(0) |
|
["seekable"]=> |
|
bool(false) |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(false) |
|
} |
|
Done |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_socket_basic.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_socket_basic.phpt |
|
@@ -10,6 +10,12 @@ |
|
?> |
|
--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 @@ |
|
int(0) |
|
["seekable"]=> |
|
bool(false) |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(false) |
|
} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt |
|
@@ -39,6 +39,12 @@ |
|
--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 @@ |
|
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 @@ |
|
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 @@ |
|
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 @@ |
|
int(0) |
|
["seekable"]=> |
|
bool(false) |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(true) |
|
} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt |
|
@@ -37,25 +37,12 @@ |
|
?> |
|
--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 @@ |
|
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 @@ |
|
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 @@ |
|
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) |
|
} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt |
|
@@ -32,6 +32,12 @@ |
|
?> |
|
--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 @@ |
|
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 @@ |
|
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 @@ |
|
int(0) |
|
["seekable"]=> |
|
bool(false) |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(false) |
|
} |
|
--- php5.git.orig/ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt |
|
+++ php5.git/ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt |
|
@@ -37,6 +37,12 @@ |
|
--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 @@ |
|
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 @@ |
|
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 @@ |
|
int(%i) |
|
["seekable"]=> |
|
bool(false) |
|
- ["timed_out"]=> |
|
- bool(false) |
|
- ["blocked"]=> |
|
- bool(true) |
|
- ["eof"]=> |
|
- bool(true) |
|
} |
|
--- php5.git.orig/main/streams/memory.c |
|
+++ php5.git/main/streams/memory.c |
|
@@ -204,7 +204,7 @@ |
|
|
|
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; |
|
@@ -243,7 +243,7 @@ |
|
{ |
|
php_stream_memory_data *ms = (php_stream_memory_data*)stream->abstract; |
|
size_t newsize; |
|
- |
|
+ |
|
switch(option) { |
|
case PHP_STREAM_OPTION_TRUNCATE_API: |
|
switch (value) { |
|
@@ -272,7 +272,7 @@ |
|
} |
|
} |
|
/* }}} */ |
|
- |
|
+ |
|
PHPAPI php_stream_ops php_stream_memory_ops = { |
|
php_stream_memory_write, php_stream_memory_read, |
|
php_stream_memory_close, php_stream_memory_flush, |
|
@@ -296,7 +296,7 @@ |
|
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; |
|
@@ -312,7 +312,7 @@ |
|
|
|
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; |
|
@@ -391,11 +391,11 @@ |
|
if (!ts->innerstream) { |
|
return -1; |
|
} |
|
- |
|
+ |
|
got = php_stream_read(ts->innerstream, buf, count); |
|
- |
|
+ |
|
stream->eof = ts->innerstream->eof; |
|
- |
|
+ |
|
return got; |
|
} |
|
/* }}} */ |
|
@@ -414,7 +414,7 @@ |
|
} else { |
|
ret = 0; |
|
} |
|
- |
|
+ |
|
if (ts->meta) { |
|
zval_ptr_dtor(&ts->meta); |
|
} |
|
@@ -452,7 +452,7 @@ |
|
ret = php_stream_seek(ts->innerstream, offset, whence); |
|
*newoffs = php_stream_tell(ts->innerstream); |
|
stream->eof = ts->innerstream->eof; |
|
- |
|
+ |
|
return ret; |
|
} |
|
/* }}} */ |
|
@@ -494,7 +494,7 @@ |
|
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); |
|
@@ -518,7 +518,7 @@ |
|
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) { |
|
@@ -630,7 +630,7 @@ |
|
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; |
|
@@ -673,7 +673,9 @@ |
|
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;
|
|
|