From 997e2e5452140fe10ea917d445d33b16a9a84681 Mon Sep 17 00:00:00 2001 From: Kalle Sommer Nielsen Date: Fri, 14 Jul 2017 01:59:23 +0200 Subject: [PATCH] Ensure that the stream position is kept between reads --- ext/exif/exif.c | 25 +++++++++++++++++-- .../tests/exif_read_data_streams_seek.phpt | 21 ++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 ext/exif/tests/exif_read_data_streams_seek.phpt diff --git a/ext/exif/exif.c b/ext/exif/exif.c index 7558374291..9ac323e1d6 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -4305,9 +4305,9 @@ static int exif_discard_imageinfo(image_info_type *ImageInfo) } /* }}} */ -/* {{{ exif_read_from_stream +/* {{{ exif_read_from_impl */ -static int exif_read_from_stream(image_info_type *ImageInfo, php_stream *stream, int read_thumbnail, int read_all) +static int exif_read_from_impl(image_info_type *ImageInfo, php_stream *stream, int read_thumbnail, int read_all) { int ret; zend_stat_t st; @@ -4368,6 +4368,27 @@ static int exif_read_from_stream(image_info_type *ImageInfo, php_stream *stream, } /* }}} */ +/* {{{ exif_read_from_stream + */ +static int exif_read_from_stream(image_info_type *ImageInfo, php_stream *stream, int read_thumbnail, int read_all) +{ + int ret; + off_t old_pos = php_stream_tell(stream); + + if (old_pos) { + php_stream_seek(stream, 0, SEEK_SET); + } + + ret = exif_read_from_impl(ImageInfo, stream, read_thumbnail, read_all); + + if (old_pos) { + php_stream_seek(stream, old_pos, SEEK_SET); + } + + return ret; +} +/* }}} */ + /* {{{ exif_read_from_file */ static int exif_read_from_file(image_info_type *ImageInfo, char *FileName, int read_thumbnail, int read_all) diff --git a/ext/exif/tests/exif_read_data_streams_seek.phpt b/ext/exif/tests/exif_read_data_streams_seek.phpt new file mode 100644 index 0000000000..e3b2c99e45 --- /dev/null +++ b/ext/exif/tests/exif_read_data_streams_seek.phpt @@ -0,0 +1,21 @@ +--TEST-- +exif_read_data() with streams test +--SKIPIF-- + +--INI-- +output_handler= +zlib.output_compression=0 +--FILE-- + +--EXPECT-- +bool(true) -- 2.50.1