c2pa-rs

A fork of https://github.com/contentauth/c2pa-rs/
git clone git://archive.git.mtrnord.blog/mtrnords-photography-manager/c2pa-rs.git
Log | Files | Refs | README

commit 18204cc2ecdc7ba0e18dc2ec619dad281da3dd9d
parent 66a872d37239f7833512da725dc1a1ba4fe34ba7
Author: mauricefisher64 <92736594+mauricefisher64@users.noreply.github.com>
Date:   Wed,  8 Feb 2023 12:49:40 -0500

Fix for using non-c2pa segment when add required segments (#185)

* Fix for using non-c2pa segment when add required segments

* fix formating
Diffstat:
Msdk/src/asset_handlers/jpeg_io.rs | 13+++++++------
1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/sdk/src/asset_handlers/jpeg_io.rs b/sdk/src/asset_handlers/jpeg_io.rs @@ -73,8 +73,9 @@ fn add_required_segs_to_stream(stream: &mut dyn CAIReadWrite) -> Result<()> { if let Some(DynImage::Jpeg(jpeg)) = dimg_opt { // check for JUMBF Seg - let app11 = jpeg.segment_by_marker(markers::APP11); - if app11.is_none() { + let cai_app11 = get_cai_segments(&jpeg)?; // make sure we only check for C2PA segments + + if cai_app11.is_empty() { // create dummy JUMBF seg let mut no_bytes: Vec<u8> = vec![0; 50]; // enough bytes to be valid no_bytes.splice(16..20, C2PA_MARKER); // cai UUID signature @@ -114,8 +115,8 @@ fn get_cai_segments(jpeg: &img_parts::jpeg::Jpeg) -> Result<Vec<usize>> { cai_segs.push(i); } else { // check if this is a CAI JUMBF block - let jumb_type = raw_vec.as_mut_slice()[24..28].to_vec(); - let is_cai = vec_compare(&C2PA_MARKER, &jumb_type); + let jumb_type = &raw_vec.as_mut_slice()[24..28]; + let is_cai = vec_compare(&C2PA_MARKER, jumb_type); if is_cai { cai_segs.push(i); cai_seg_cnt = 1; @@ -188,8 +189,8 @@ impl CAILoader for JpegIO { } else if raw_vec.len() > 28 { // must be at least 28 bytes for this to be a valid JUMBF box // check if this is a CAI JUMBF block - let jumb_type = raw_vec.as_mut_slice()[24..28].to_vec(); - let is_cai = vec_compare(&C2PA_MARKER, &jumb_type); + let jumb_type = &raw_vec.as_mut_slice()[24..28]; + let is_cai = vec_compare(&C2PA_MARKER, jumb_type); if is_cai { if manifest_store_cnt == 1 { return Err(Error::TooManyManifestStores);