You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.7 KiB
50 lines
1.7 KiB
From fe33599f4695c4ab442e1e5f8682cfda11321308 Mon Sep 17 00:00:00 2001
|
|
From: Aleksei Bavshin <alebastr89@gmail.com>
|
|
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<Item = Range> {
|
|
- 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
|
|
|