diff options
| -rw-r--r-- | ext/standard/tests/file/bug61961.phpt | 14 | ||||
| -rwxr-xr-x | main/streams/streams.c | 7 |
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 31473d6b66..db6e25f687 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -1437,7 +1437,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; } |
