toeverything/AFFiNE · error · napi::Error

failed to preserve exif metadata

Error message

failed to preserve exif metadata

What it means

EXIF preservation path failed: encoding the retained metadata or muxing it into the WebP container (WebPMuxCreateInternal/mux add) failed, so keep_exif output could not be assembled; the error propagates from preserve_exif.

Source

Thrown at packages/backend/native/src/image.rs:218

  metadata.remove_tag(ExifTag::Orientation(vec![1]));

  if !metadata.get_ifds().iter().any(|ifd| !ifd.get_tags().is_empty()) {
    return Ok(());
  }

  let encoded_metadata = metadata.encode().context("failed to preserve exif metadata")?;
  let source = WebPData {
    bytes: output.as_ptr(),
    size: output.len(),
  };
  let exif = WebPData {
    bytes: encoded_metadata.as_ptr(),
    size: encoded_metadata.len(),
  };
  let mut assembled = WebPData::default();
  let mux = unsafe { WebPMuxCreateInternal(&source, 1, WEBP_MUX_ABI_VERSION as _) };
  if mux.is_null() {
    bail!("failed to preserve exif metadata");
  }

  let encoded = (|| -> AnyResult<Vec<u8>> {
    if unsafe { WebPMuxSetChunk(mux, c"EXIF".as_ptr(), &exif, 1) } != WebPMuxError::WEBP_MUX_OK {
      bail!("failed to preserve exif metadata");
    }

    WebPDataInit(&mut assembled);

    if unsafe { WebPMuxAssemble(mux, &mut assembled) } != WebPMuxError::WEBP_MUX_OK {
      bail!("failed to preserve exif metadata");
    }

    Ok(unsafe { std::slice::from_raw_parts(assembled.bytes, assembled.size) }.to_vec())
  })();

  unsafe {
    WebPDataClear(&mut assembled);

View on GitHub (pinned to b4c8548c09)

Solutions

  1. Proceed without EXIF preservation or fix the metadata block.
  2. Strip malformed EXIF data and re-encode.
Defensive patterns

Strategy: fallback

When it happens

Trigger: Raised when EXIF metadata re-encoding fails or when WebP mux operations (create, set EXIF chunk, assemble) fail while keep_exif is requested.

Common situations: Occurs when preserving EXIF from a source image into the WebP output fails. Retry without keep_exif or strip metadata from the source.


AI-assisted analysis of toeverything/AFFiNE@b4c8548c09 (2026-08-18). Data as JSON: /api/errors/c2e2220da1d1e1c4. Report an issue: GitHub.