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.
rust-pyo3/0001-fix-regression-in-128-...

55 lines
2.3 KiB

From 0654258b18d314c83d6a3e78c4030d22b6b3ea75 Mon Sep 17 00:00:00 2001
From: Fabio Valentini <decathorpe@gmail.com>
Date: Wed, 26 Jun 2024 18:52:08 +0200
Subject: [PATCH] fix regression in 128-bit number conversions
---
src/conversions/std/num.rs | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/src/conversions/std/num.rs b/src/conversions/std/num.rs
index effe7c7..1304e73 100644
--- a/src/conversions/std/num.rs
+++ b/src/conversions/std/num.rs
@@ -238,15 +238,18 @@ mod fast_128bit_int_conversion {
unsafe { ffi::PyNumber_Index(ob.as_ptr()).assume_owned_or_err(ob.py())? };
let mut buffer = [0u8; std::mem::size_of::<$rust_type>()];
#[cfg(not(Py_3_13))]
- crate::err::error_on_minusone(ob.py(), unsafe {
- ffi::_PyLong_AsByteArray(
- num.as_ptr() as *mut ffi::PyLongObject,
- buffer.as_mut_ptr(),
- buffer.len(),
- 1,
- $is_signed.into(),
- )
- })?;
+ {
+ crate::err::error_on_minusone(ob.py(), unsafe {
+ ffi::_PyLong_AsByteArray(
+ num.as_ptr() as *mut ffi::PyLongObject,
+ buffer.as_mut_ptr(),
+ buffer.len(),
+ 1,
+ $is_signed.into(),
+ )
+ })?;
+ Ok(<$rust_type>::from_le_bytes(buffer))
+ }
#[cfg(Py_3_13)]
{
let mut flags = ffi::Py_ASNATIVEBYTES_NATIVE_ENDIAN;
@@ -272,8 +275,8 @@ mod fast_128bit_int_conversion {
"Python int larger than 128 bits",
));
}
+ Ok(<$rust_type>::from_ne_bytes(buffer))
}
- Ok(<$rust_type>::from_ne_bytes(buffer))
}
#[cfg(feature = "experimental-inspect")]
--
2.45.2