From: Kalle Sommer Nielsen Date: Thu, 13 Jul 2017 23:59:23 +0000 (+0200) Subject: Ensure that the stream position is kept between reads X-Git-Tag: php-7.2.0beta1~41 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=997e2e5452140fe10ea917d445d33b16a9a84681;p=php Ensure that the stream position is kept between reads --- 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)