com php-src: Ensure that the stream position is kept between reads: ext/exif/exif.c ext/exif/tests/exif_read_data_streams_s eek.phpt
| From: | Kalle Sommer Nielsen | Date: | Thu, 13 Jul 2017 23:59:23 +0000 |
| Subject: | com php-src: Ensure that the stream position is kept between reads: ext/exif/exif.c ext/exif/tests/exif_read_data_streams_s eek.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-98551@lists.php.net to get a copy of this message | ||
Commit: 997e2e5452140fe10ea917d445d33b16a9a84681
Author: Kalle Sommer Nielsen <kalle@php.net> Fri, 14 Jul 2017 01:59:23 +0200
Parents: f7d9f6456ccba63cbf582d2269cfcaa3da9600f4
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=997e2e5452140fe10ea917d445d33b16a9a84681
Log:
Ensure that the stream position is kept between reads
Changed paths:
M ext/exif/exif.c
A ext/exif/tests/exif_read_data_streams_seek.phpt
Diff:
diff --git a/ext/exif/exif.c b/ext/exif/exif.c
index 7558374..9ac323e 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 0000000..e3b2c99
--- /dev/null
+++ b/ext/exif/tests/exif_read_data_streams_seek.phpt
@@ -0,0 +1,21 @@
+--TEST--
+exif_read_data() with streams test
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not
available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+$fp = fopen(__DIR__ . '/image027.tiff', 'rb');
+
+fseek($fp, 100, SEEK_SET);
+
+exif_read_data($fp);
+
+var_dump(ftell($fp) === 100);
+
+fclose($fp);
+?>
+--EXPECT--
+bool(true)