diff --git a/lib/PHPExif/Mapper/Native.php b/lib/PHPExif/Mapper/Native.php index 49c101e..e5e826d 100644 --- a/lib/PHPExif/Mapper/Native.php +++ b/lib/PHPExif/Mapper/Native.php @@ -165,7 +165,12 @@ public function mapRawData(array $data) break; case self::FOCALLENGTH: $parts = explode('/', $value); - $value = (int) reset($parts) / (int) end($parts); + // Avoid division by zero if focal length is invalid + if (end($parts) == '0') { + $value = 0; + } else { + $value = (int) reset($parts) / (int) end($parts); + } break; case self::XRESOLUTION: case self::YRESOLUTION: diff --git a/tests/PHPExif/Mapper/NativeMapperTest.php b/tests/PHPExif/Mapper/NativeMapperTest.php index 8a4c2a2..d1c6228 100644 --- a/tests/PHPExif/Mapper/NativeMapperTest.php +++ b/tests/PHPExif/Mapper/NativeMapperTest.php @@ -138,6 +138,21 @@ public function testMapRawDataCorrectlyFormatsFocalLength() $this->assertEquals(6, reset($mapped)); } + /** + * @group mapper + * @covers \PHPExif\Mapper\Native::mapRawData + */ + public function testMapRawDataCorrectlyFormatsFocalLengthDivisionByZero() + { + $rawData = array( + \PHPExif\Mapper\Native::FOCALLENGTH => '1/0', + ); + + $mapped = $this->mapper->mapRawData($rawData); + + $this->assertEquals(0, reset($mapped)); + } + /** * @group mapper * @covers \PHPExif\Mapper\Native::mapRawData