From 2a126aabd73771a0c6e2c406d2a6ce9fa27ed3c9 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Sat, 28 Sep 2024 22:35:17 +0100 Subject: [PATCH 1/2] ext/exif: Minor refactoring of exif_thumbnail() --- ext/exif/exif.c | 18 ++++++++++++------ ext/exif/tests/exif_thumbnail_streams.phpt | 12 ++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/ext/exif/exif.c b/ext/exif/exif.c index 518c31526532..f6e3b7abbb55 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -4699,7 +4699,6 @@ PHP_FUNCTION(exif_read_data) PHP_FUNCTION(exif_thumbnail) { bool ret; - int arg_c = ZEND_NUM_ARGS(); image_info_type ImageInfo; zval *stream; zval *z_width = NULL, *z_height = NULL, *z_imagetype = NULL; @@ -4731,7 +4730,7 @@ PHP_FUNCTION(exif_thumbnail) RETURN_THROWS(); } - if (CHECK_NULL_PATH(Z_STRVAL_P(stream), Z_STRLEN_P(stream))) { + if (zend_str_has_nul_byte(Z_STR_P(stream))) { zend_argument_value_error(1, "must not contain any null bytes"); RETURN_THROWS(); } @@ -4756,17 +4755,24 @@ PHP_FUNCTION(exif_thumbnail) exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Returning thumbnail(%d)", ImageInfo.Thumbnail.size); #endif - ZVAL_STRINGL(return_value, ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size); - if (arg_c >= 3) { - if (!ImageInfo.Thumbnail.width || !ImageInfo.Thumbnail.height) { + RETVAL_STRINGL(ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size); + if (z_width) { + if (!ImageInfo.Thumbnail.width) { if (!exif_scan_thumbnail(&ImageInfo)) { ImageInfo.Thumbnail.width = ImageInfo.Thumbnail.height = 0; } } ZEND_TRY_ASSIGN_REF_LONG(z_width, ImageInfo.Thumbnail.width); + } + if (z_height) { + if (!ImageInfo.Thumbnail.height) { + if (!exif_scan_thumbnail(&ImageInfo)) { + ImageInfo.Thumbnail.width = ImageInfo.Thumbnail.height = 0; + } + } ZEND_TRY_ASSIGN_REF_LONG(z_height, ImageInfo.Thumbnail.height); } - if (arg_c >= 4) { + if (z_imagetype) { ZEND_TRY_ASSIGN_REF_LONG(z_imagetype, ImageInfo.Thumbnail.filetype); } diff --git a/ext/exif/tests/exif_thumbnail_streams.phpt b/ext/exif/tests/exif_thumbnail_streams.phpt index 3838ceb23bd7..420478c2f43f 100644 --- a/ext/exif/tests/exif_thumbnail_streams.phpt +++ b/ext/exif/tests/exif_thumbnail_streams.phpt @@ -11,7 +11,19 @@ $fp = fopen(__DIR__ . '/sony.jpg', 'rb'); var_dump(strlen(exif_thumbnail($fp))); +exif_thumbnail($fp, width: $width); +var_dump($width); + +exif_thumbnail($fp, height: $height); +var_dump($height); + +exif_thumbnail($fp, image_type: $image_type); +var_dump($image_type == IMAGETYPE_JPEG); + fclose($fp); ?> --EXPECT-- int(4150) +int(160) +int(90) +bool(true) From df6b17c8830172c30a058c1b3063e814cf632889 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Sun, 29 Sep 2024 15:26:39 +0100 Subject: [PATCH 2/2] Review comments --- ext/exif/exif.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/ext/exif/exif.c b/ext/exif/exif.c index f6e3b7abbb55..5096f69001b9 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -4756,23 +4756,18 @@ PHP_FUNCTION(exif_thumbnail) #endif RETVAL_STRINGL(ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size); - if (z_width) { - if (!ImageInfo.Thumbnail.width) { - if (!exif_scan_thumbnail(&ImageInfo)) { - ImageInfo.Thumbnail.width = ImageInfo.Thumbnail.height = 0; - } + if ((z_width || z_height) && (!ImageInfo.Thumbnail.width || !ImageInfo.Thumbnail.height)) { + if (!exif_scan_thumbnail(&ImageInfo)) { + ImageInfo.Thumbnail.width = ImageInfo.Thumbnail.height = 0; } + } + if (z_width) { ZEND_TRY_ASSIGN_REF_LONG(z_width, ImageInfo.Thumbnail.width); } if (z_height) { - if (!ImageInfo.Thumbnail.height) { - if (!exif_scan_thumbnail(&ImageInfo)) { - ImageInfo.Thumbnail.width = ImageInfo.Thumbnail.height = 0; - } - } ZEND_TRY_ASSIGN_REF_LONG(z_height, ImageInfo.Thumbnail.height); } - if (z_imagetype) { + if (z_imagetype) { ZEND_TRY_ASSIGN_REF_LONG(z_imagetype, ImageInfo.Thumbnail.filetype); }