From bbd23afa983a6a27181166aa9534319662a97585 Mon Sep 17 00:00:00 2001 From: Hannes Magnusson Date: Mon, 20 Dec 2010 11:00:27 +0000 Subject: [PATCH] Fixed bug#53579 (stream_get_contents() segfaults on ziparchive streams) Also added the filename being access to the stream_get_meta_data() array --- ext/zip/tests/bug53579.phpt | 44 +++++++++++++++++++++++++++++++++++++ ext/zip/zip_stream.c | 1 + 2 files changed, 45 insertions(+) create mode 100644 ext/zip/tests/bug53579.phpt diff --git a/ext/zip/tests/bug53579.phpt b/ext/zip/tests/bug53579.phpt new file mode 100644 index 0000000000..1d533303b5 --- /dev/null +++ b/ext/zip/tests/bug53579.phpt @@ -0,0 +1,44 @@ +--TEST-- +Bug #53579 (stream_get_contents() segfaults on ziparchive streams) +--SKIPIF-- + +--FILE-- +open($file)) { + exit('failed'); +} +$fp = $zip->getStream('foo'); + +var_dump($fp); +if(!$fp) exit("\n"); +$contents = stream_get_contents($fp); + +fclose($fp); +$zip->close(); +var_dump($contents); + + +$fp = fopen('zip://' . dirname(__FILE__) . '/test_with_comment.zip#foo', 'rb'); +if (!$fp) { + exit("cannot open\n"); +} +$contents = stream_get_contents($fp); +var_dump($contents); +fclose($fp); + +?> +--EXPECTF-- +resource(%d) of type (stream) +string(5) "foo + +" +string(5) "foo + +" diff --git a/ext/zip/zip_stream.c b/ext/zip/zip_stream.c index 7ba365424f..dad09233e7 100644 --- a/ext/zip/zip_stream.c +++ b/ext/zip/zip_stream.c @@ -216,6 +216,7 @@ php_stream *php_stream_zip_open(char *filename, char *path, char *mode STREAMS_D self->stream = NULL; self->cursor = 0; stream = php_stream_alloc(&php_stream_zipio_ops, self, NULL, mode); + stream->orig_path = estrdup(path); } else { zip_close(stream_za); } -- 2.40.0