diff --git a/ext/standard/tests/file/bug61961.phpt b/ext/standard/tests/file/bug61961.phpt new file mode 100644 index 0000000000000..23f3ba7b652fd --- /dev/null +++ b/ext/standard/tests/file/bug61961.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #61961 (file_get_contents() leaks when access empty file with max length) +--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 116c0aa045eb8..fe7800b9feb68 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; }