nom-exif v3.6.1
Patch release for nom-exif.
v3.6.0
- Split
tokiofeature intotokioandtokio-fs— thetokiofeature now only pulls intokio/io-util, enabling the async streaming API (AsyncMediaSource::seekable/unseekable/from_memory,MediaParser::parse_*_async) onwasm32-unknown-unknown. Path-based helpers (read_exif_async,read_track_async,read_metadata_async,AsyncMediaSource::open) moved to the newtokio-fsfeature (impliestokio). Users who previously usedfeatures = ["tokio"]withread_exif_asyncetc. should switch tofeatures = ["tokio-fs"]. #53
- Slice coercion in MotionPhoto attribute comparison — comparing
extract_attr_value()against byte-string literals now uses explicit&b"..."[..]coercion, fixing a compile error when a crate like rkyv is present in the dependency graph. #58
Full changelog: CHANGELOG.md · crates.io: nom-exif 3.6.0
v3.5.1
- Slice coercion in MotionPhoto attribute comparison — comparing
extract_attr_value()against byte-string literals now uses explicit&b"..."[..]coercion, fixing a compile error when a crate like rkyv is present in the dependency graph. #58
Full changelog: CHANGELOG.md · crates.io: nom-exif 3.5.1
v3.5.0
-
CameraSerialNumberEXIF tag (0xa431). Standard EXIF tag for the camera body serial number. #56 -
LensSerialNumberEXIF tag (0xa435). Standard EXIF tag for the lens serial number. #57
Full changelog: CHANGELOG.md · crates.io: nom-exif 3.5.0
v3.4.2
- Streaming PNG parsing for files with non-trivial IDAT — every real-world PNG (i.e. anything beyond a stripped-down test fixture) surfaced
malformed iso-bmff box: PNG: bad signaturefromparse_exif/parse_image_metadata. Root cause was a two-part bug in the chunk walker: (a)ClearAndSkip(total - remaining)under-requested the skip distance by exactlycursor + remainingbytes — semantically the caller should advance the parser's logical position bycursor + total, not just past the buffer's end — leaving the parser stranded mid-IDAT; (b) on the resumed callextract_chunksalways re-validatedbuf[..8]against the PNG signature, but the resumed buffer started mid-stream and the check failed. Fixed both: skip request is nowcursor + total, and a newParsingState::PngPastSignaturetells the resumed call to skip the signature check. In-memory mode (from_memory) was unaffected because the full file is buffered at once andClearAndSkipnever fires. Fixes #55.
Error::Malformed.kindcorrectly identifies the failing structural unit. Previously every parse failure that flowed throughFrom<ParsedError> for ErrororFrom<nom::Err<...>> for Errorwas hard-coded asMalformedKind::IsoBmffBox/MalformedKind::TiffHeaderrespectively — misleading for PNG / JPEG / EBML inputs. TheMalformedKindis now threaded throughParsingError::Failed,ParsedError::Failed, andLoopAction::Failed, and surfaced unchanged at theErrorboundary. Downstream code that (incorrectly) matched onkind == IsoBmffBoxto catch any parse failure will need updating; conformant code that uses a_ =>arm (required by#[non_exhaustive]) is unaffected.
MalformedKind::PngChunkvariant.MalformedKindis#[non_exhaustive], so adding a variant is non-breaking.
Full changelog: CHANGELOG.md · crates.io: nom-exif 3.4.2
v3.4.1
- GPS sub-IFD parsing for Sony A7C2 HIF (and any camera that emits GPSVersionID first) —
IfdIter::parse_tag_entryshort-circuited ontag == 0as a defensive guard against zero-padded malformed IFDs. But tag 0 is also the legitimate GPSVersionID — the spec-defined first entry of the GPS sub-IFD. Aborting iteration there caused the whole sub-IFD to be dropped, silently losing every GPS field. Now gated on!self.is_gps_subifd()so the defense survives in non-GPS contexts while GPSVersionID parses normally. Fixes #50.
Full changelog: CHANGELOG.md · crates.io: nom-exif 3.4.1