From 8724f5ffbfa004b409dbf54193152a0ec33fb37f Mon Sep 17 00:00:00 2001 From: Richard Lau Date: Fri, 6 Mar 2026 18:55:21 +0000 Subject: [PATCH 1/2] deps: patch resb crate Original commit message: Fix resb on big endian platforms Refs: https://github.com/unicode-org/icu4x/commit/d310df8b3fb1cbfc551682ccf80f378ed152da8e Refs: https://github.com/unicode-org/icu4x/pull/7658 --- deps/crates/Cargo.lock | 2 -- deps/crates/Cargo.toml | 3 +++ .../{vendor => patches}/resb/.cargo-checksum.json | 0 deps/crates/{vendor => patches}/resb/Cargo.lock | 0 deps/crates/{vendor => patches}/resb/Cargo.toml | 0 deps/crates/{vendor => patches}/resb/LICENSE | 0 deps/crates/{vendor => patches}/resb/README.md | 0 .../resb/examples/data/zoneinfo64.res | Bin .../resb/examples/data/zoneinfo64.txt | 0 .../{vendor => patches}/resb/examples/genrb.rs | 0 deps/crates/{vendor => patches}/resb/src/binary.rs | 2 +- .../resb/src/binary/deserializer.rs | 11 ++++++++--- .../{vendor => patches}/resb/src/binary/header.rs | 5 +---- .../{vendor => patches}/resb/src/binary/helpers.rs | 0 .../resb/src/binary/serializer.rs | 0 deps/crates/{vendor => patches}/resb/src/bundle.rs | 0 deps/crates/{vendor => patches}/resb/src/lib.rs | 0 deps/crates/{vendor => patches}/resb/src/text.rs | 0 .../{vendor => patches}/resb/src/text/reader.rs | 0 .../resb/src/text/reader/parse_state.rs | 0 20 files changed, 13 insertions(+), 10 deletions(-) rename deps/crates/{vendor => patches}/resb/.cargo-checksum.json (100%) rename deps/crates/{vendor => patches}/resb/Cargo.lock (100%) rename deps/crates/{vendor => patches}/resb/Cargo.toml (100%) rename deps/crates/{vendor => patches}/resb/LICENSE (100%) rename deps/crates/{vendor => patches}/resb/README.md (100%) rename deps/crates/{vendor => patches}/resb/examples/data/zoneinfo64.res (100%) rename deps/crates/{vendor => patches}/resb/examples/data/zoneinfo64.txt (100%) rename deps/crates/{vendor => patches}/resb/examples/genrb.rs (100%) rename deps/crates/{vendor => patches}/resb/src/binary.rs (99%) rename deps/crates/{vendor => patches}/resb/src/binary/deserializer.rs (99%) rename deps/crates/{vendor => patches}/resb/src/binary/header.rs (95%) rename deps/crates/{vendor => patches}/resb/src/binary/helpers.rs (100%) rename deps/crates/{vendor => patches}/resb/src/binary/serializer.rs (100%) rename deps/crates/{vendor => patches}/resb/src/bundle.rs (100%) rename deps/crates/{vendor => patches}/resb/src/lib.rs (100%) rename deps/crates/{vendor => patches}/resb/src/text.rs (100%) rename deps/crates/{vendor => patches}/resb/src/text/reader.rs (100%) rename deps/crates/{vendor => patches}/resb/src/text/reader/parse_state.rs (100%) diff --git a/deps/crates/Cargo.lock b/deps/crates/Cargo.lock index 7ae5240fdbed26..f8f6913c843a4d 100644 --- a/deps/crates/Cargo.lock +++ b/deps/crates/Cargo.lock @@ -243,8 +243,6 @@ dependencies = [ [[package]] name = "resb" version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a067ab3b5ca3b4dc307d0de9cf75f9f5e6ca9717b192b2f28a36c83e5de9e76" dependencies = [ "potential_utf", "serde_core", diff --git a/deps/crates/Cargo.toml b/deps/crates/Cargo.toml index ee208c16db1f2b..033c6f2693912f 100644 --- a/deps/crates/Cargo.toml +++ b/deps/crates/Cargo.toml @@ -30,3 +30,6 @@ version = "=0.1.0" default-features = false # This is necessary to enable a spec-compliance quirk when upgrading to v0.1.2 # features = ["float64_representable_durations"] + +[patch.crates-io] +resb = { path="patches/resb" } diff --git a/deps/crates/vendor/resb/.cargo-checksum.json b/deps/crates/patches/resb/.cargo-checksum.json similarity index 100% rename from deps/crates/vendor/resb/.cargo-checksum.json rename to deps/crates/patches/resb/.cargo-checksum.json diff --git a/deps/crates/vendor/resb/Cargo.lock b/deps/crates/patches/resb/Cargo.lock similarity index 100% rename from deps/crates/vendor/resb/Cargo.lock rename to deps/crates/patches/resb/Cargo.lock diff --git a/deps/crates/vendor/resb/Cargo.toml b/deps/crates/patches/resb/Cargo.toml similarity index 100% rename from deps/crates/vendor/resb/Cargo.toml rename to deps/crates/patches/resb/Cargo.toml diff --git a/deps/crates/vendor/resb/LICENSE b/deps/crates/patches/resb/LICENSE similarity index 100% rename from deps/crates/vendor/resb/LICENSE rename to deps/crates/patches/resb/LICENSE diff --git a/deps/crates/vendor/resb/README.md b/deps/crates/patches/resb/README.md similarity index 100% rename from deps/crates/vendor/resb/README.md rename to deps/crates/patches/resb/README.md diff --git a/deps/crates/vendor/resb/examples/data/zoneinfo64.res b/deps/crates/patches/resb/examples/data/zoneinfo64.res similarity index 100% rename from deps/crates/vendor/resb/examples/data/zoneinfo64.res rename to deps/crates/patches/resb/examples/data/zoneinfo64.res diff --git a/deps/crates/vendor/resb/examples/data/zoneinfo64.txt b/deps/crates/patches/resb/examples/data/zoneinfo64.txt similarity index 100% rename from deps/crates/vendor/resb/examples/data/zoneinfo64.txt rename to deps/crates/patches/resb/examples/data/zoneinfo64.txt diff --git a/deps/crates/vendor/resb/examples/genrb.rs b/deps/crates/patches/resb/examples/genrb.rs similarity index 100% rename from deps/crates/vendor/resb/examples/genrb.rs rename to deps/crates/patches/resb/examples/genrb.rs diff --git a/deps/crates/vendor/resb/src/binary.rs b/deps/crates/patches/resb/src/binary.rs similarity index 99% rename from deps/crates/vendor/resb/src/binary.rs rename to deps/crates/patches/resb/src/binary.rs index 5269bbd28c9808..fd9081fbe065f3 100644 --- a/deps/crates/vendor/resb/src/binary.rs +++ b/deps/crates/patches/resb/src/binary.rs @@ -473,7 +473,7 @@ fn read_u16(input: &[u8]) -> Result<(u16, &[u8]), BinaryDeserializerError> { let bytes = get_subslice(input, ..core::mem::size_of::())? .try_into() .unwrap(); - let value = u16::from_le_bytes(bytes); + let value = u16::from_ne_bytes(bytes); let rest = get_subslice(input, core::mem::size_of::()..)?; Ok((value, rest)) diff --git a/deps/crates/vendor/resb/src/binary/deserializer.rs b/deps/crates/patches/resb/src/binary/deserializer.rs similarity index 99% rename from deps/crates/vendor/resb/src/binary/deserializer.rs rename to deps/crates/patches/resb/src/binary/deserializer.rs index d52f568146013b..c533e67d509c4e 100644 --- a/deps/crates/vendor/resb/src/binary/deserializer.rs +++ b/deps/crates/patches/resb/src/binary/deserializer.rs @@ -23,6 +23,11 @@ const SYSTEM_CHARSET_FAMILY: CharsetFamily = CharsetFamily::Ascii; /// Deserializes an instance of type `T` from bytes representing a binary ICU /// resource bundle. +/// +/// The input data must be in the platform's native endianness. ICU4C resource +/// bundles such as `zoneinfo64.res` are generated in both little endian and +/// big endian formats; callers must ensure the appropriate format is provided +/// for the target platform. pub fn from_words<'a, T>(input: &'a [u32]) -> Result where T: Deserialize<'a>, @@ -142,7 +147,7 @@ impl<'de> ResourceTreeDeserializer<'de> { )) } }; - let descriptor = u32::from_le_bytes(descriptor); + let descriptor = u32::from_ne_bytes(descriptor); ResDescriptor::try_from(descriptor) } @@ -887,7 +892,7 @@ impl<'de> Resource16BitDeserializer<'de> { // exactly 2 bytes. #[expect(clippy::unwrap_used)] let bytes = <[u8; 2]>::try_from(bytes).unwrap(); - u16::from_le_bytes(bytes) + u16::from_ne_bytes(bytes) }); char::decode_utf16(units) @@ -1255,7 +1260,7 @@ fn read_u32(input: &[u8]) -> Result<(u32, &[u8]), BinaryDeserializerError> { ))? .try_into() .unwrap(); - let value = u32::from_le_bytes(bytes); + let value = u32::from_ne_bytes(bytes); let rest = input diff --git a/deps/crates/vendor/resb/src/binary/header.rs b/deps/crates/patches/resb/src/binary/header.rs similarity index 95% rename from deps/crates/vendor/resb/src/binary/header.rs rename to deps/crates/patches/resb/src/binary/header.rs index be776f404ea86d..b8518fce9cea2b 100644 --- a/deps/crates/vendor/resb/src/binary/header.rs +++ b/deps/crates/patches/resb/src/binary/header.rs @@ -113,11 +113,8 @@ impl TryFrom<&[u8]> for BinReprInfo { let (size, value) = read_u16(value)?; let (reserved_word, value) = read_u16(value)?; - // While the consumer is responsible for verifying acceptability of most - // contents of the repr info, we explicitly depend on little endian data - // in order to ensure compatibility with `zerovec`. let (endianness, value) = (Endianness::try_from(value[0])?, &value[1..]); - if endianness != Endianness::Little { + if (endianness == Endianness::Little) != cfg!(target_endian = "little") { return Err(BinaryDeserializerError::unsupported_format( "big-endian bundles are not supported", )); diff --git a/deps/crates/vendor/resb/src/binary/helpers.rs b/deps/crates/patches/resb/src/binary/helpers.rs similarity index 100% rename from deps/crates/vendor/resb/src/binary/helpers.rs rename to deps/crates/patches/resb/src/binary/helpers.rs diff --git a/deps/crates/vendor/resb/src/binary/serializer.rs b/deps/crates/patches/resb/src/binary/serializer.rs similarity index 100% rename from deps/crates/vendor/resb/src/binary/serializer.rs rename to deps/crates/patches/resb/src/binary/serializer.rs diff --git a/deps/crates/vendor/resb/src/bundle.rs b/deps/crates/patches/resb/src/bundle.rs similarity index 100% rename from deps/crates/vendor/resb/src/bundle.rs rename to deps/crates/patches/resb/src/bundle.rs diff --git a/deps/crates/vendor/resb/src/lib.rs b/deps/crates/patches/resb/src/lib.rs similarity index 100% rename from deps/crates/vendor/resb/src/lib.rs rename to deps/crates/patches/resb/src/lib.rs diff --git a/deps/crates/vendor/resb/src/text.rs b/deps/crates/patches/resb/src/text.rs similarity index 100% rename from deps/crates/vendor/resb/src/text.rs rename to deps/crates/patches/resb/src/text.rs diff --git a/deps/crates/vendor/resb/src/text/reader.rs b/deps/crates/patches/resb/src/text/reader.rs similarity index 100% rename from deps/crates/vendor/resb/src/text/reader.rs rename to deps/crates/patches/resb/src/text/reader.rs diff --git a/deps/crates/vendor/resb/src/text/reader/parse_state.rs b/deps/crates/patches/resb/src/text/reader/parse_state.rs similarity index 100% rename from deps/crates/vendor/resb/src/text/reader/parse_state.rs rename to deps/crates/patches/resb/src/text/reader/parse_state.rs From e15abab325f60f96d882dd0ff608e7a719ecc789 Mon Sep 17 00:00:00 2001 From: Richard Lau Date: Fri, 6 Mar 2026 20:03:27 +0000 Subject: [PATCH 2/2] fixup! deps: patch resb crate --- deps/crates/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/deps/crates/Cargo.toml b/deps/crates/Cargo.toml index 033c6f2693912f..8c6224e0ed5f64 100644 --- a/deps/crates/Cargo.toml +++ b/deps/crates/Cargo.toml @@ -32,4 +32,5 @@ default-features = false # features = ["float64_representable_durations"] [patch.crates-io] +# Float https://github.com/unicode-org/icu4x/pull/7658 until crate is updated. resb = { path="patches/resb" }