Browse Source

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

PECL
Arnaud Le Blanc 18 years ago
parent
commit
f6345133b3
  1. 14
      ext/standard/php_fopen_wrapper.c
  2. 37
      ext/standard/tests/streams/bug44818.phpt

14
ext/standard/php_fopen_wrapper.c

@ -177,11 +177,21 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, ch
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")) {
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")) {

37
ext/standard/tests/streams/bug44818.phpt

@ -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"
Loading…
Cancel
Save