diff options
| author | Hannes Magnusson <bjori@php.net> | 2010-12-20 11:00:27 +0000 |
|---|---|---|
| committer | Hannes Magnusson <bjori@php.net> | 2010-12-20 11:00:27 +0000 |
| commit | bbd23afa983a6a27181166aa9534319662a97585 (patch) | |
| tree | 1d121ced96a9680b8c482f965ed62ae288942d81 | |
| parent | d6ac811e5d1d2d6f483db0d3c0709ac683d5a261 (diff) | |
| download | php-git-bbd23afa983a6a27181166aa9534319662a97585.tar.gz | |
Fixed bug#53579 (stream_get_contents() segfaults on ziparchive streams)
Also added the filename being access to the stream_get_meta_data() array
| -rw-r--r-- | ext/zip/tests/bug53579.phpt | 44 | ||||
| -rw-r--r-- | ext/zip/zip_stream.c | 1 |
2 files changed, 45 insertions, 0 deletions
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-- +<?php +/* $Id: oo_stream.phpt 260091 2008-05-21 09:27:41Z pajoye $ */ +if(!extension_loaded('zip')) die('skip'); +?> +--FILE-- +<?php +$dirname = dirname(__FILE__) . '/'; +$file = $dirname . 'test_with_comment.zip'; +include $dirname . 'utils.inc'; +$zip = new ZipArchive; +if (!$zip->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); } |
