diff --git a/lib-fix-incorrect-int-ptr-cast-on-big-endian-archite.patch b/lib-fix-incorrect-int-ptr-cast-on-big-endian-archite.patch new file mode 100644 index 0000000..4010794 --- /dev/null +++ b/lib-fix-incorrect-int-ptr-cast-on-big-endian-archite.patch @@ -0,0 +1,49 @@ +From fe33599f4695c4ab442e1e5f8682cfda11321308 Mon Sep 17 00:00:00 2001 +From: Aleksei Bavshin +Date: Tue, 22 Mar 2022 22:47:21 -0700 +Subject: [PATCH] lib: fix incorrect int ptr cast on big-endian architectures + +`*usize` -> `*u32` conversion on 64-bit big-endian machine takes high +halfword of the value. As a consequence, any result returned via +`count` is unexpectedly shifted left: + + u32 = 00 00 00 01 // 1 + usize = 00 00 00 01 00 00 00 00 // 4294967296 + +Fixes following test failure: +``` +$ cargo test -- tests::corpus_test +<...> +running 13 tests +memory allocation of 206158430208 bytes failed +error: test failed, to rerun pass '--lib' +``` +--- + lib/binding_rust/lib.rs | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/binding_rust/lib.rs b/binding_rust/lib.rs +index e88a411c..1df9e7ac 100644 +--- a/binding_rust/lib.rs ++++ b/binding_rust/lib.rs +@@ -705,14 +705,14 @@ impl Tree { + /// after calling one of the [Parser::parse] functions. Call it on the old tree that + /// was passed to parse, and pass the new tree that was returned from `parse`. + pub fn changed_ranges(&self, other: &Tree) -> impl ExactSizeIterator { +- let mut count = 0; ++ let mut count = 0u32; + unsafe { + let ptr = ffi::ts_tree_get_changed_ranges( + self.0.as_ptr(), + other.0.as_ptr(), +- &mut count as *mut _ as *mut u32, ++ &mut count as *mut u32, + ); +- util::CBufferIter::new(ptr, count).map(|r| r.into()) ++ util::CBufferIter::new(ptr, count as usize).map(|r| r.into()) + } + } + } +-- +2.35.1 + diff --git a/rust-tree-sitter.spec b/rust-tree-sitter.spec index 8de80bd..9ad36e0 100644 --- a/rust-tree-sitter.spec +++ b/rust-tree-sitter.spec @@ -18,6 +18,8 @@ Source: %{crates_source} Source1: https://github.com/tree-sitter/tree-sitter/raw/v%{version}/LICENSE#/LICENSE.upstream # tree-sitter/tree-sitter#1524 modified to apply to the crate source Patch0: binding_rust-regenerate-bindings-during-build.patch +# fix tree-sitter-cli tests on s390x - tree-sitter/tree-sitter#1692 +Patch1: lib-fix-incorrect-int-ptr-cast-on-big-endian-archite.patch ExclusiveArch: %{rust_arches}