drewnoakes / metadata-extractor

Extracts Exif, IPTC, XMP, ICC and other metadata from image, video and audio files
Apache License 2.0
2.55k stars 479 forks source link

ClassCastException from String to Long #554

Open Shepard opened 2 years ago

Shepard commented 2 years ago

I get a very similar exception to the recently reported issue #553.

The image I'm trying to read can be found here: https://tool.trendexplorer.com/uploads/microtrends/f/f/37973b9f1867abf32b5983899cf9cb8b7f4e9891.jpg Unfortunately I don't know what the licensing situation with this image is so I cannot provide it as a sample image for your public library.

In my case I'm using a wrapped version of 2.15.0.1 (org.tallison) as provided with tika-parsers but I could also reproduce this by feeding the image into ImageMetadataReader via the command line in version 2.16.0.

The exception there is:

java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Long (java.lang.String and java.lang.Long are in module java.base of loader 'bootstrap')
    at com.drew.metadata.exif.ExifTiffHandler.processAppleRunTime(ExifTiffHandler.java:391)
    at com.drew.metadata.exif.ExifTiffHandler.customProcessTag(ExifTiffHandler.java:251)
    at com.drew.imaging.tiff.TiffReader.processIfd(TiffReader.java:220)
    at com.drew.metadata.exif.ExifTiffHandler.processMakernote(ExifTiffHandler.java:645)
    at com.drew.metadata.exif.ExifTiffHandler.customProcessTag(ExifTiffHandler.java:207)
    at com.drew.imaging.tiff.TiffReader.processIfd(TiffReader.java:220)
    at com.drew.imaging.tiff.TiffReader.processIfd(TiffReader.java:214)
    at com.drew.imaging.tiff.TiffReader.processTiff(TiffReader.java:78)
    at com.drew.metadata.exif.ExifReader.extract(ExifReader.java:94)
    at com.drew.metadata.exif.ExifReader.extract(ExifReader.java:84)
    at com.drew.metadata.exif.ExifReader.readJpegSegments(ExifReader.java:63)
    at com.drew.imaging.jpeg.JpegMetadataReader.processJpegSegmentData(JpegMetadataReader.java:134)
    at com.drew.imaging.jpeg.JpegMetadataReader.process(JpegMetadataReader.java:126)
    at com.drew.imaging.jpeg.JpegMetadataReader.readMetadata(JpegMetadataReader.java:77)
    at com.drew.imaging.jpeg.JpegMetadataReader.readMetadata(JpegMetadataReader.java:84)
    at com.drew.imaging.ImageMetadataReader.readMetadata(ImageMetadataReader.java:146)
    at com.drew.imaging.ImageMetadataReader.readMetadata(ImageMetadataReader.java:124)
    at com.drew.imaging.ImageMetadataReader.readMetadata(ImageMetadataReader.java:204)
    at com.drew.imaging.ImageMetadataReader.main(ImageMetadataReader.java:253)

The offending line is:

directory.setLong(AppleRunTimeMakernoteDirectory.CMTimeValue, (Long)values.get("value"));

It seems it finds a String stored under the key "value".