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.
55 lines
2.3 KiB
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
|
|
|