diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-10-09 17:33:01 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-10-09 17:33:29 +0200 |
commit | daf1fc6e316d435cee9edd812b904e597e241ae5 (patch) | |
tree | fbc43bb6258a95f9dfca1aa18b4e9f4b30974686 | |
parent | 3164186d53533ac5239790e692b33dd6e56c18df (diff) | |
download | php-git-daf1fc6e316d435cee9edd812b904e597e241ae5.tar.gz |
Avoid float to int cast UB in exif
-rw-r--r-- | ext/exif/exif.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/ext/exif/exif.c b/ext/exif/exif.c index b47e55fba1..f961f44a46 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -4598,8 +4598,9 @@ PHP_FUNCTION(exif_read_data) exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "CCDWidth", "%dmm", (int)ImageInfo.CCDWidth); } if(ImageInfo.ExposureTime>0) { - if(ImageInfo.ExposureTime <= 0.5) { - exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime", "%0.3F s (1/%d)", ImageInfo.ExposureTime, (int)(0.5 + 1/ImageInfo.ExposureTime)); + float recip_exposure_time = 0.5f + 1.0f/ImageInfo.ExposureTime; + if (ImageInfo.ExposureTime <= 0.5 && recip_exposure_time < INT_MAX) { + exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime", "%0.3F s (1/%d)", ImageInfo.ExposureTime, (int) recip_exposure_time); } else { exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime", "%0.3F s", ImageInfo.ExposureTime); } |