diff --git a/0001-Make-sure-offset_table_offset-is-written-as-8-bytes.patch b/0001-Make-sure-offset_table_offset-is-written-as-8-bytes.patch new file mode 100644 index 0000000..564f65b --- /dev/null +++ b/0001-Make-sure-offset_table_offset-is-written-as-8-bytes.patch @@ -0,0 +1,43 @@ +From 2b984085425549496b365255e807d1b45ac57e69 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Thu, 16 Jan 2020 12:52:53 -0800 +Subject: [PATCH 1/2] Make sure offset_table_offset is written as 8 bytes + +It's a `usize` value, but the output format expects 8 bytes. That's fine +on 64-bit targets, but 32-bit targets were failing tests: + + ---- stream::binary_writer::tests::bplist_roundtrip stdout ---- + thread 'stream::binary_writer::tests::bplist_roundtrip' panicked at 'assertion failed: `(left == right)` + left: `8`, + right: `4`: destination and source slices have different lengths', src/libcore/slice/mod.rs:2217:9 + note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace. + ---- stream::binary_writer::tests::nskeyedarchiver_roundtrip stdout ---- + thread 'stream::binary_writer::tests::nskeyedarchiver_roundtrip' panicked at 'assertion failed: `(left == right)` + left: `8`, + right: `4`: destination and source slices have different lengths', src/libcore/slice/mod.rs:2217:9 + ---- stream::binary_writer::tests::utf16_roundtrip stdout ---- + thread 'stream::binary_writer::tests::utf16_roundtrip' panicked at 'assertion failed: `(left == right)` + left: `8`, + right: `4`: destination and source slices have different lengths', src/libcore/slice/mod.rs:2217:9 + +Casting to `u64` makes sure we have the correct size to write. +--- + src/stream/binary_writer.rs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/stream/binary_writer.rs b/src/stream/binary_writer.rs +index 6541ea8d09d5..fe1e0902cda8 100644 +--- a/src/stream/binary_writer.rs ++++ b/src/stream/binary_writer.rs +@@ -335,7 +335,7 @@ impl BinaryWriter { + trailer[6] = offset_size; + trailer[7] = ref_size; + trailer[8..16].copy_from_slice(&(self.num_objects as u64).to_be_bytes()); +- trailer[24..32].copy_from_slice(&offset_table_offset.to_be_bytes()); ++ trailer[24..32].copy_from_slice(&(offset_table_offset as u64).to_be_bytes()); + self.writer.write_exact(&trailer)?; + + self.writer +-- +2.24.1 + diff --git a/rust-plist.spec b/rust-plist.spec index 9fc4b3c..5d66f27 100644 --- a/rust-plist.spec +++ b/rust-plist.spec @@ -14,6 +14,9 @@ License: MIT URL: https://crates.io/crates/plist Source: %{crates_source} +# Fix for 32-bit targets, https://github.com/ebarnard/rust-plist/pull/47 +Patch1: 0001-Make-sure-offset_table_offset-is-written-as-8-bytes.patch + ExclusiveArch: %{rust_arches} %if %{__cargo_skip_build} BuildArch: noarch