mindeng/nom-exif
 Watch   
 Star   
 Fork   
3 days ago
nom-exif

v3.6.2

Fixed

  • Avoid overflow panic on malformed HEIF iloc extent offsets — a crafted or corrupt iloc box could produce extent/base offsets that overflow when summed, panicking in debug builds (and wrapping in release). Offset arithmetic in iloc/meta now uses checked addition and returns None for out-of-range extents instead of panicking, so Exif extraction fails gracefully on such files. #64

Full changelog: CHANGELOG.md · crates.io: nom-exif 3.6.2

2026-06-11 22:34:49
nom-exif

nom-exif v3.6.1

Patch release for nom-exif.

2026-06-11 22:34:49
nom-exif
2026-05-28 22:22:13
nom-exif

v3.6.0

Changed

  • Split tokio feature into tokio and tokio-fs — the tokio feature now only pulls in tokio/io-util, enabling the async streaming API (AsyncMediaSource::seekable/unseekable/from_memory, MediaParser::parse_*_async) on wasm32-unknown-unknown. Path-based helpers (read_exif_async, read_track_async, read_metadata_async, AsyncMediaSource::open) moved to the new tokio-fs feature (implies tokio). Users who previously used features = ["tokio"] with read_exif_async etc. should switch to features = ["tokio-fs"]. #53

Fixed

  • 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

2026-05-28 22:05:56
nom-exif

v3.5.1

Fixed

  • 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

2026-05-23 18:35:00
nom-exif
2026-05-23 18:30:04
nom-exif

v3.5.0

Added

  • CameraSerialNumber EXIF tag (0xa431). Standard EXIF tag for the camera body serial number. #56

  • LensSerialNumber EXIF tag (0xa435). Standard EXIF tag for the lens serial number. #57


Full changelog: CHANGELOG.md · crates.io: nom-exif 3.5.0

2026-05-20 15:57:00
nom-exif
2026-05-20 15:56:51
nom-exif

v3.4.2

Fixed

  • 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 signature from parse_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 exactly cursor + remaining bytes — semantically the caller should advance the parser's logical position by cursor + total, not just past the buffer's end — leaving the parser stranded mid-IDAT; (b) on the resumed call extract_chunks always re-validated buf[..8] against the PNG signature, but the resumed buffer started mid-stream and the check failed. Fixed both: skip request is now cursor + total, and a new ParsingState::PngPastSignature tells the resumed call to skip the signature check. In-memory mode (from_memory) was unaffected because the full file is buffered at once and ClearAndSkip never fires. Fixes #55.

Fixed (behaviour)

  • Error::Malformed.kind correctly identifies the failing structural unit. Previously every parse failure that flowed through From<ParsedError> for Error or From<nom::Err<...>> for Error was hard-coded as MalformedKind::IsoBmffBox / MalformedKind::TiffHeader respectively — misleading for PNG / JPEG / EBML inputs. The MalformedKind is now threaded through ParsingError::Failed, ParsedError::Failed, and LoopAction::Failed, and surfaced unchanged at the Error boundary. Downstream code that (incorrectly) matched on kind == IsoBmffBox to catch any parse failure will need updating; conformant code that uses a _ => arm (required by #[non_exhaustive]) is unaffected.

Added

  • MalformedKind::PngChunk variant. MalformedKind is #[non_exhaustive], so adding a variant is non-breaking.

Full changelog: CHANGELOG.md · crates.io: nom-exif 3.4.2

2026-05-12 16:39:12
nom-exif