Fixed bug #44818 (php://memory writeable when opened read only)

This commit is contained in:
Arnaud Le Blanc 2008-11-11 00:44:36 +00:00
parent 2fe765b5f4
commit dec12b2549
2 changed files with 49 additions and 2 deletions

View file

@ -186,11 +186,21 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, ch
return NULL; return NULL;
} }
} }
return php_stream_temp_create(TEMP_STREAM_DEFAULT, max_memory); if (strpbrk(mode, "wa+")) {
mode_rw = TEMP_STREAM_DEFAULT;
} else {
mode_rw = TEMP_STREAM_READONLY;
}
return php_stream_temp_create(mode_rw, max_memory);
} }
if (!strcasecmp(path, "memory")) { if (!strcasecmp(path, "memory")) {
return php_stream_memory_create(TEMP_STREAM_DEFAULT); if (strpbrk(mode, "wa+")) {
mode_rw = TEMP_STREAM_DEFAULT;
} else {
mode_rw = TEMP_STREAM_READONLY;
}
return php_stream_memory_create(mode_rw);
} }
if (!strcasecmp(path, "output")) { if (!strcasecmp(path, "output")) {

View file

@ -0,0 +1,37 @@
--TEST--
Bug #44818 (php://memory writeable when opened read only)
--FILE--
<?php
function test($url, $mode) {
echo "$url, $mode\n";
$fd = fopen($url, $mode);
var_dump($fd, fwrite($fd, b"foo"));
var_dump(fseek($fd, 0, SEEK_SET), fread($fd, 3));
fclose($fd);
}
test("php://memory","r");
test("php://memory","r+");
test("php://temp","r");
test("php://temp","w");
?>
--EXPECTF--
php://memory, r
resource(%d) of type (stream)
int(0)
int(0)
string(0) ""
php://memory, r+
resource(%d) of type (stream)
int(3)
int(0)
string(3) "foo"
php://temp, r
resource(%d) of type (stream)
int(0)
int(0)
string(0) ""
php://temp, w
resource(%d) of type (stream)
int(3)
int(0)
string(3) "foo"