summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2012-05-06 12:45:45 +0200
committerNikita Popov <nikic@php.net>2012-05-06 12:45:45 +0200
commit311ee8f69c9c91b78b35a787a5dbfdb34403753e (patch)
tree4b37e6d5e43f668ff98a82041bcaf7e383b78d0b
parent4632fe0eefb749da5c6bfdf22beaf2ffa80c3a56 (diff)
parent3e9923dd8d08f88740f58e54386c0f7c569a5aa6 (diff)
downloadphp-git-311ee8f69c9c91b78b35a787a5dbfdb34403753e.tar.gz
Merge branch 'pull-request/76' into PHP-5.3
-rw-r--r--ext/standard/tests/file/bug61961.phpt14
-rwxr-xr-xmain/streams/streams.c7
2 files changed, 20 insertions, 1 deletions
diff --git a/ext/standard/tests/file/bug61961.phpt b/ext/standard/tests/file/bug61961.phpt
new file mode 100644
index 0000000000..ff0279a367
--- /dev/null
+++ b/ext/standard/tests/file/bug61961.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #61961 (file_get_content leaks when access empty file with max length)
+--FILE--
+<?php
+$tmp_empty_file = __FILE__ . ".tmp";
+file_put_contents($tmp_empty_file, "");
+
+var_dump(file_get_contents($tmp_empty_file, NULL, NULL, NULL, 10));
+unlink($tmp_empty_file);
+?>
+==DONE==
+--EXPECT--
+string(0) ""
+==DONE== \ No newline at end of file
diff --git a/main/streams/streams.c b/main/streams/streams.c
index 116c0aa045..fe7800b9fe 100755
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -1366,7 +1366,12 @@ PHPAPI size_t _php_stream_copy_to_mem(php_stream *src, char **buf, size_t maxlen
len += ret;
ptr += ret;
}
- *ptr = '\0';
+ if (len) {
+ *ptr = '\0';
+ } else {
+ pefree(*buf, persistent);
+ *buf = NULL;
+ }
return len;
}