Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-ormsgpack for 
openSUSE:Factory checked in at 2026-11-09 16:07:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ormsgpack (Old)
 and      /work/SRC/openSUSE:Factory/.python-ormsgpack.new.3759290 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-ormsgpack"

Mon Nov  9 16:07:31 2026 rev:3 rq:1396279 version:1.13.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ormsgpack/python-ormsgpack.changes        
2026-10-16 20:13:11.160988352 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-ormsgpack.new.3759290/python-ormsgpack.changes
   2026-11-09 16:08:25.756330042 +0100
@@ -1,0 +2,7 @@
+Mon Nov  9 08:53:21 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 1.13.1:
+  * Security: prevent excessive memory and CPU consumption when
+    decoding truncated MessagePack arrays
+
+-------------------------------------------------------------------

Old:
----
  ormsgpack-1.13.0.tar.gz

New:
----
  ormsgpack-1.13.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-ormsgpack.spec ++++++
--- /var/tmp/diff_new_pack.jyeLbI/_old  2026-11-09 16:08:26.894377713 +0100
+++ /var/tmp/diff_new_pack.jyeLbI/_new  2026-11-09 16:08:26.896377797 +0100
@@ -19,7 +19,7 @@
 %global rustflags '-Clink-arg=-Wl,-z,relro,-z,now'
 %{?sle15_python_module_pythons}
 Name:           python-ormsgpack
-Version:        1.13.0
+Version:        1.13.1
 Release:        0
 Summary:        Fast Python msgpack library supporting dataclasses, datetimes, 
and numpy
 License:        Apache-2.0 OR MIT
@@ -58,7 +58,7 @@
 %check
 %python_expand PYTHONPATH=%{buildroot}%{$python_sitearch} 
python%{$python_bin_suffix} -B -c "import ormsgpack; 
print(ormsgpack.__version__)"
 
-%files %{python_files}
+%files %python_files
 %doc README.md
 %license LICENSE-APACHE LICENSE-MIT
 %{python_sitearch}/ormsgpack

++++++ _service ++++++
--- /var/tmp/diff_new_pack.jyeLbI/_old  2026-11-09 16:08:26.932379305 +0100
+++ /var/tmp/diff_new_pack.jyeLbI/_new  2026-11-09 16:08:26.936379473 +0100
@@ -5,7 +5,7 @@
     <param name="update">true</param>
   </service>
   <service name="cargo_audit" mode="manual">
-    <param name="srcdir">ormsgpack-1.13.0</param>
+    <param name="srcdir">ormsgpack-1.13.1</param>
   </service>
 </services>
 

++++++ ormsgpack-1.13.0.tar.gz -> ormsgpack-1.13.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/Cargo.lock 
new/ormsgpack-1.13.1/Cargo.lock
--- old/ormsgpack-1.13.0/Cargo.lock     2006-07-24 03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/Cargo.lock     2006-07-24 03:21:28.000000000 +0200
@@ -87,7 +87,7 @@
 
 [[package]]
 name = "ormsgpack"
-version = "1.13.0"
+version = "1.13.1"
 dependencies = [
  "ahash",
  "chrono",
@@ -229,9 +229,9 @@
 
 [[package]]
 name = "smallvec"
-version = "1.16.2"
+version = "1.16.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e"
+checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8"
 
 [[package]]
 name = "syn"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/Cargo.toml 
new/ormsgpack-1.13.1/Cargo.toml
--- old/ormsgpack-1.13.0/Cargo.toml     2006-07-24 03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/Cargo.toml     2006-07-24 03:21:28.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "ormsgpack"
-version = "1.13.0"
+version = "1.13.1"
 edition = "2021"
 rust-version = "1.88"
 include = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/PKG-INFO 
new/ormsgpack-1.13.1/PKG-INFO
--- old/ormsgpack-1.13.0/PKG-INFO       2006-07-24 03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/PKG-INFO       2006-07-24 03:21:28.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: ormsgpack
-Version: 1.13.0
+Version: 1.13.1
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: Apache Software License
@@ -62,7 +62,7 @@
 ```
 
 Installing from a source distribution requires
-[Rust](https://www.rust-lang.org/) 1.81 or newer and
+[Rust](https://www.rust-lang.org/) 1.88 or newer and
 [maturin](https://github.com/PyO3/maturin).
 
 ## Quickstart
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/README.md 
new/ormsgpack-1.13.1/README.md
--- old/ormsgpack-1.13.0/README.md      2006-07-24 03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/README.md      2006-07-24 03:21:28.000000000 +0200
@@ -30,7 +30,7 @@
 ```
 
 Installing from a source distribution requires
-[Rust](https://www.rust-lang.org/) 1.81 or newer and
+[Rust](https://www.rust-lang.org/) 1.88 or newer and
 [maturin](https://github.com/PyO3/maturin).
 
 ## Quickstart
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/build.rs 
new/ormsgpack-1.13.1/build.rs
--- old/ormsgpack-1.13.0/build.rs       2006-07-24 03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/build.rs       2006-07-24 03:21:28.000000000 +0200
@@ -3,6 +3,7 @@
     pyo3_build_config::add_extension_module_link_args();
     let python_config = pyo3_build_config::get();
 
+    println!("cargo::rustc-check-cfg=cfg(check_leaks)");
     println!("cargo::rustc-check-cfg=cfg(unicode_state)");
     if std::env::var("CARGO_CFG_TARGET_ENDIAN").unwrap() == "little"
         && !(std::env::var("CARGO_CFG_TARGET_OS").unwrap() == "windows"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/pyproject.toml 
new/ormsgpack-1.13.1/pyproject.toml
--- old/ormsgpack-1.13.0/pyproject.toml 2006-07-24 03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/pyproject.toml 2006-07-24 03:21:28.000000000 +0200
@@ -1,6 +1,6 @@
 [project]
 name = "ormsgpack"
-version = "1.13.0"
+version = "1.13.1"
 requires-python = ">=3.11"
 classifiers = [
     "Development Status :: 5 - Production/Stable",
@@ -35,16 +35,17 @@
 [project.urls]
 Homepage = "https://github.com/ormsgpack/ormsgpack";
 
+[project.entry-points.pyinstaller40]
+hook-dirs = "ormsgpack._pyinstaller:get_hook_dirs"
+
 [dependency-groups]
 dev = [
     "msgpack",
-    "mypy; platform_python_implementation == 'CPython'",
     "pendulum",
     "pydantic",
     "pytest",
     "python-dateutil",
     "pytz",
-    "ruff",
     "types-python-dateutil",
     "types-pytz",
     "tzdata",
@@ -55,11 +56,21 @@
     "pytest-codspeed; platform_python_implementation != 'GraalVM'",
 ]
 
+lint = [
+    "mypy",
+    "ruff",
+    "tombi",
+]
+
 docs = [
     "furo",
     "sphinx",
 ]
 
+memray = [
+    "pytest-memray",
+]
+
 [build-system]
 build-backend = "maturin"
 requires = ["maturin>=1.0,<2.0"]
@@ -107,6 +118,4 @@
     { file = "pyproject.toml" },
 ]
 default-groups = ["dev", "dev-extra"]
-
-[project.entry-points.pyinstaller40]
-hook-dirs = "ormsgpack._pyinstaller:get_hook_dirs"
+exclude-newer = "3 days"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/src/deserialize/cache.rs 
new/ormsgpack-1.13.1/src/deserialize/cache.rs
--- old/ormsgpack-1.13.0/src/deserialize/cache.rs       2006-07-24 
03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/src/deserialize/cache.rs       2006-07-24 
03:21:28.000000000 +0200
@@ -65,4 +65,16 @@
         };
         Ok(entry.bind_borrowed(py).to_owned())
     }
+
+    #[cfg(check_leaks)]
+    pub fn contains(&self, obj: &Bound<'_, PyAny>) -> bool {
+        #[cfg(Py_GIL_DISABLED)]
+        let entries = self.entries.lock().unwrap();
+        #[cfg(not(Py_GIL_DISABLED))]
+        let entries = self.entries.borrow();
+        entries
+            .iter()
+            .flatten()
+            .any(|key| key.as_ptr() == obj.as_ptr())
+    }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/src/deserialize/deserializer.rs 
new/ormsgpack-1.13.1/src/deserialize/deserializer.rs
--- old/ormsgpack-1.13.0/src/deserialize/deserializer.rs        2006-07-24 
03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/src/deserialize/deserializer.rs        2006-07-24 
03:21:28.000000000 +0200
@@ -27,6 +27,7 @@
     }
 }
 
+const PREALLOC_LIMIT: u32 = 64;
 const RECURSION_LIMIT: u16 = 1024;
 
 fn deserialize_slice<'a, 'py>(
@@ -227,9 +228,15 @@
     fn deserialize_array(&mut self, len: u32) -> Result<Bound<'py, PyList>, 
Error> {
         let py = self.py;
         let state = self.state;
-        let elements =
-            (0..len).map(|_| PyItem(self.deserialize().map_err(|e| 
e.into_pyerr(py, state))));
-        PyList::new(py, elements).map_err(Error::PyErr)
+        let prealloc_len = len.min(PREALLOC_LIMIT);
+        let elements = (0..prealloc_len)
+            .map(|_| PyItem(self.deserialize().map_err(|e| e.into_pyerr(py, 
state))));
+        let list = PyList::new(py, elements).map_err(Error::PyErr)?;
+        for _ in prealloc_len..len {
+            let item = self.deserialize()?;
+            list.append(item).map_err(Error::PyErr)?;
+        }
+        Ok(list)
     }
 
     fn deserialize_map_with_str_keys(&mut self, len: u32) -> Result<Bound<'py, 
PyDict>, Error> {
@@ -408,6 +415,13 @@
     }
 
     fn deserialize_map_array_key(&mut self, len: u32) -> Result<Bound<'py, 
PyTuple>, Error> {
+        if unlikely(len > PREALLOC_LIMIT) {
+            let mut elements = Vec::with_capacity(PREALLOC_LIMIT as usize);
+            for _ in 0..len {
+                elements.push(self.deserialize_map_key()?);
+            }
+            return PyTuple::new(self.py, elements).map_err(Error::PyErr);
+        }
         let py = self.py;
         let state = self.state;
         let elements = (0..len).map(|_| {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/src/ext.rs 
new/ormsgpack-1.13.1/src/ext.rs
--- old/ormsgpack-1.13.0/src/ext.rs     2006-07-24 03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/src/ext.rs     2006-07-24 03:21:28.000000000 +0200
@@ -1,77 +1,39 @@
+// SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
 use pyo3::exceptions::PyTypeError;
-use pyo3::ffi::*;
+use pyo3::gc::{PyTraverseError, PyVisit};
 use pyo3::prelude::*;
-use pyo3::types::{PyBytes, PyDict, PyInt, PyTuple};
-use std::os::raw::{c_int, c_uint, c_void};
-use std::ptr::null_mut;
+use pyo3::types::{PyBytes, PyInt};
 
-#[repr(C)]
+#[pyclass(name = "Ext", module = "ormsgpack", frozen)]
 pub struct PyExt {
-    pub ob_base: PyObject,
-    pub tag: *mut PyObject,
-    pub data: *mut PyObject,
+    pub tag: Py<PyInt>,
+    pub data: Py<PyBytes>,
 }
 
-#[no_mangle]
-unsafe extern "C" fn ext_new(
-    subtype: *mut PyTypeObject,
-    args: *mut PyObject,
-    kwds: *mut PyObject,
-) -> *mut PyObject {
-    let py = Python::assume_attached();
-    let args = Borrowed::from_ptr(py, args).cast_unchecked::<PyTuple>();
-    let kwds = Borrowed::from_ptr_or_opt(py, kwds).map(|v| 
v.cast_unchecked::<PyDict>());
-    if args.len() != 2 || kwds.is_some_and(|v| v.len() != 0) {
-        PyTypeError::new_err("Ext.__new__() takes 2 positional 
arguments").restore(py);
-        return null_mut();
-    }
-    let tag = args.get_item(0).unwrap();
-    if !tag.is_instance_of::<PyInt>() {
-        PyTypeError::new_err("Ext.__new__() first argument must be 
int").restore(py);
-        return null_mut();
+#[pymethods]
+impl PyExt {
+    #[new]
+    #[pyo3(signature = (tag, data, /))]
+    fn new(tag: &Bound<'_, PyAny>, data: &Bound<'_, PyAny>) -> PyResult<Self> {
+        if !tag.is_instance_of::<PyInt>() {
+            let err = PyTypeError::new_err("Ext.__new__() first argument must 
be int");
+            return Err(err);
+        }
+        let tag = unsafe { tag.cast_unchecked::<PyInt>() };
+        if !data.is_instance_of::<PyBytes>() {
+            let err = PyTypeError::new_err("Ext.__new__() second argument must 
be bytes");
+            return Err(err);
+        }
+        let data = unsafe { data.cast_unchecked::<PyBytes>() };
+        Ok(Self {
+            tag: tag.clone().unbind(),
+            data: data.clone().unbind(),
+        })
     }
-    let data = args.get_item(1).unwrap();
-    if !data.is_instance_of::<PyBytes>() {
-        PyTypeError::new_err("Ext.__new__() second argument must be 
bytes").restore(py);
-        return null_mut();
-    }
-    let op = (*subtype).tp_alloc.unwrap()(subtype, 0);
-    let obj = &mut *op.cast::<PyExt>();
-    obj.tag = tag.into_ptr();
-    obj.data = data.into_ptr();
-    op
-}
 
-#[no_mangle]
-unsafe extern "C" fn ext_dealloc(op: *mut PyObject) {
-    let ob_type = Py_TYPE(op);
-    Py_DECREF((*op.cast::<PyExt>()).tag);
-    Py_DECREF((*op.cast::<PyExt>()).data);
-    (*ob_type).tp_free.unwrap()(op.cast::<c_void>());
-    Py_DECREF(ob_type.cast::<PyObject>());
-}
-
-pub fn create_ext_type<'py>(py: Python<'py>) -> PyResult<Bound<'py, PyAny>> {
-    let mut slots: [PyType_Slot; 3] = [
-        PyType_Slot {
-            slot: Py_tp_new,
-            pfunc: ext_new as *mut c_void,
-        },
-        PyType_Slot {
-            slot: Py_tp_dealloc,
-            pfunc: ext_dealloc as *mut c_void,
-        },
-        PyType_Slot {
-            slot: 0,
-            pfunc: null_mut(),
-        },
-    ];
-    let mut spec = PyType_Spec {
-        name: c"ormsgpack.Ext".as_ptr(),
-        basicsize: std::mem::size_of::<PyExt>() as c_int,
-        itemsize: 0,
-        flags: Py_TPFLAGS_DEFAULT as c_uint,
-        slots: slots.as_mut_ptr(),
-    };
-    unsafe { Bound::from_owned_ptr_or_err(py, PyType_FromSpec(&mut spec)) }
+    fn __traverse__(&self, visit: PyVisit<'_>) -> Result<(), PyTraverseError> {
+        visit.call(&self.tag)?;
+        visit.call(&self.data)
+    }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/src/fragment.rs 
new/ormsgpack-1.13.1/src/fragment.rs
--- old/ormsgpack-1.13.0/src/fragment.rs        2006-07-24 03:21:28.000000000 
+0200
+++ new/ormsgpack-1.13.1/src/fragment.rs        2006-07-24 03:21:28.000000000 
+0200
@@ -1,79 +1,37 @@
+// SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
 use crate::msgpack;
 use pyo3::exceptions::{PyTypeError, PyValueError};
-use pyo3::ffi::*;
+use pyo3::gc::{PyTraverseError, PyVisit};
 use pyo3::prelude::*;
-use pyo3::types::{PyBytes, PyDict, PyTuple};
-use std::os::raw::{c_int, c_uint, c_void};
-use std::ptr::null_mut;
+use pyo3::types::PyBytes;
 
-#[repr(C)]
+#[pyclass(name = "Fragment", module = "ormsgpack", frozen)]
 pub struct PyFragment {
-    pub ob_base: PyObject,
-    pub data: *mut PyObject,
+    pub data: Py<PyBytes>,
 }
 
-#[no_mangle]
-unsafe extern "C" fn fragment_new(
-    subtype: *mut PyTypeObject,
-    args: *mut PyObject,
-    kwds: *mut PyObject,
-) -> *mut PyObject {
-    let py = Python::assume_attached();
-    let args = Borrowed::from_ptr(py, args).cast_unchecked::<PyTuple>();
-    let kwds = Borrowed::from_ptr_or_opt(py, kwds).map(|v| 
v.cast_unchecked::<PyDict>());
-    if args.len() != 1 || kwds.is_some_and(|v| v.len() != 0) {
-        PyTypeError::new_err("Fragment.__new__() takes 1 positional 
argument").restore(py);
-        return null_mut();
-    }
-    let data = args.get_item(0).unwrap();
-    if !data.is_instance_of::<PyBytes>() {
-        PyTypeError::new_err("Fragment.__new__() first argument must be 
bytes").restore(py);
-        return null_mut();
-    }
-    let contents = data.cast_unchecked::<PyBytes>().as_bytes();
-    let mut validator = msgpack::Validator::new(contents);
-    match validator.validate() {
-        Ok(()) => (),
-        Err(err) => {
-            PyValueError::new_err(err.to_string()).restore(py);
-            return null_mut();
+#[pymethods]
+impl PyFragment {
+    #[new]
+    #[pyo3(signature = (data, /))]
+    fn new(data: &Bound<'_, PyAny>) -> PyResult<Self> {
+        if !data.is_instance_of::<PyBytes>() {
+            let err = PyTypeError::new_err("Fragment.__new__() first argument 
must be bytes");
+            return Err(err);
         }
+        let data = unsafe { data.cast_unchecked::<PyBytes>() };
+        let contents = data.as_bytes();
+        let mut validator = msgpack::Validator::new(contents);
+        validator
+            .validate()
+            .map_err(|err| PyValueError::new_err(err.to_string()))?;
+        Ok(Self {
+            data: data.clone().unbind(),
+        })
     }
-    let op = (*subtype).tp_alloc.unwrap()(subtype, 0);
-    let obj = &mut *op.cast::<PyFragment>();
-    obj.data = data.into_ptr();
-    op
-}
 
-#[no_mangle]
-unsafe extern "C" fn fragment_dealloc(op: *mut PyObject) {
-    let ob_type = Py_TYPE(op);
-    Py_DECREF((*op.cast::<PyFragment>()).data);
-    (*ob_type).tp_free.unwrap()(op.cast::<c_void>());
-    Py_DECREF(ob_type.cast::<PyObject>());
-}
-
-pub fn create_fragment_type<'py>(py: Python<'py>) -> PyResult<Bound<'py, 
PyAny>> {
-    let mut slots: [PyType_Slot; 3] = [
-        PyType_Slot {
-            slot: Py_tp_new,
-            pfunc: fragment_new as *mut c_void,
-        },
-        PyType_Slot {
-            slot: Py_tp_dealloc,
-            pfunc: fragment_dealloc as *mut c_void,
-        },
-        PyType_Slot {
-            slot: 0,
-            pfunc: null_mut(),
-        },
-    ];
-    let mut spec = PyType_Spec {
-        name: c"ormsgpack.Fragment".as_ptr(),
-        basicsize: std::mem::size_of::<PyFragment>() as c_int,
-        itemsize: 0,
-        flags: Py_TPFLAGS_DEFAULT as c_uint,
-        slots: slots.as_mut_ptr(),
-    };
-    unsafe { Bound::from_owned_ptr_or_err(py, PyType_FromSpec(&mut spec)) }
+    fn __traverse__(&self, visit: PyVisit<'_>) -> Result<(), PyTraverseError> {
+        visit.call(&self.data)
+    }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/src/lib.rs 
new/ormsgpack-1.13.1/src/lib.rs
--- old/ormsgpack-1.13.0/src/lib.rs     2006-07-24 03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/src/lib.rs     2006-07-24 03:21:28.000000000 +0200
@@ -35,6 +35,8 @@
 
     module.add_function(wrap_pyfunction!(packb, module)?)?;
     module.add_function(wrap_pyfunction!(unpackb, module)?)?;
+    #[cfg(check_leaks)]
+    module.add_function(wrap_pyfunction!(is_cached_key, module)?)?;
     module.add("__version__", env!("CARGO_PKG_VERSION"))?;
     module.add("Ext", state.serialize.ext.type_object.bind(py))?;
     module.add("Fragment", state.serialize.fragment.type_object.bind(py))?;
@@ -122,3 +124,14 @@
         opts,
     )
 }
+
+#[cfg(check_leaks)]
+#[pyfunction]
+fn is_cached_key(obj: &Bound<'_, PyAny>) -> bool {
+    STATE
+        .get(obj.py())
+        .unwrap()
+        .deserialize
+        .key_map
+        .contains(obj)
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/src/serialize/ext.rs 
new/ormsgpack-1.13.1/src/serialize/ext.rs
--- old/ormsgpack-1.13.0/src/serialize/ext.rs   2006-07-24 03:21:28.000000000 
+0200
+++ new/ormsgpack-1.13.1/src/serialize/ext.rs   2006-07-24 03:21:28.000000000 
+0200
@@ -3,26 +3,26 @@
 use crate::ext::PyExt;
 use crate::ffi::BorrowedWithType;
 use pyo3::prelude::*;
-use pyo3::types::{PyBytes, PyInt};
+use pyo3::types::PyType;
 use serde::ser::{Serialize, Serializer};
 use serde_bytes::Bytes;
 
 pub struct State {
-    pub type_object: Py<PyAny>,
+    pub type_object: Py<PyType>,
 }
 
 impl State {
     #[cold]
     pub fn new(py: Python<'_>) -> PyResult<Self> {
         Ok(Self {
-            type_object: crate::ext::create_ext_type(py)?.unbind(),
+            type_object: py.get_type::<PyExt>().unbind(),
         })
     }
 }
 
 #[repr(transparent)]
 pub struct Ext<'a, 'py> {
-    obj: Borrowed<'a, 'py, PyAny>,
+    obj: Borrowed<'a, 'py, PyExt>,
 }
 
 impl<'a, 'py> Ext<'a, 'py> {
@@ -30,7 +30,7 @@
     pub fn try_new(obj: BorrowedWithType<'a, 'py>, state: &State) -> 
Option<Self> {
         if obj.get_type_ptr() == state.type_object.as_ptr().cast() {
             Some(Self {
-                obj: obj.as_borrowed(),
+                obj: unsafe { obj.as_borrowed().cast_unchecked::<PyExt>() },
             })
         } else {
             None
@@ -43,17 +43,13 @@
     where
         S: Serializer,
     {
-        let ext = self.obj.as_ptr().cast::<PyExt>();
-        let tag = match unsafe {
-            Borrowed::from_ptr(self.obj.py(), 
(*ext).tag).cast_unchecked::<PyInt>()
-        }
-        .extract::<u32>()
-        {
+        let py = self.obj.py();
+        let ext = self.obj.get();
+        let tag = match ext.tag.bind(py).extract::<u32>() {
             Ok(tag @ 0..=127) => tag,
             _ => return Err(serde::ser::Error::custom("Extension type out of 
range")),
         };
-        let data =
-            unsafe { Borrowed::from_ptr(self.obj.py(), 
(*ext).data).cast_unchecked::<PyBytes>() };
+        let data = ext.data.bind(py);
 
         serializer.serialize_newtype_variant("", tag, "", 
Bytes::new(data.as_bytes()))
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ormsgpack-1.13.0/src/serialize/fragment.rs 
new/ormsgpack-1.13.1/src/serialize/fragment.rs
--- old/ormsgpack-1.13.0/src/serialize/fragment.rs      2006-07-24 
03:21:28.000000000 +0200
+++ new/ormsgpack-1.13.1/src/serialize/fragment.rs      2006-07-24 
03:21:28.000000000 +0200
@@ -3,26 +3,26 @@
 use crate::ffi::BorrowedWithType;
 use crate::fragment::PyFragment;
 use pyo3::prelude::*;
-use pyo3::types::PyBytes;
+use pyo3::types::PyType;
 use serde::ser::{Serialize, Serializer};
 use serde_bytes::Bytes;
 
 pub struct State {
-    pub type_object: Py<PyAny>,
+    pub type_object: Py<PyType>,
 }
 
 impl State {
     #[cold]
     pub fn new(py: Python<'_>) -> PyResult<Self> {
         Ok(Self {
-            type_object: crate::fragment::create_fragment_type(py)?.unbind(),
+            type_object: py.get_type::<PyFragment>().unbind(),
         })
     }
 }
 
 #[repr(transparent)]
 pub struct Fragment<'a, 'py> {
-    obj: Borrowed<'a, 'py, PyAny>,
+    obj: Borrowed<'a, 'py, PyFragment>,
 }
 
 impl<'a, 'py> Fragment<'a, 'py> {
@@ -30,7 +30,7 @@
     pub fn try_new(obj: BorrowedWithType<'a, 'py>, state: &State) -> 
Option<Self> {
         if obj.get_type_ptr() == state.type_object.as_ptr().cast() {
             Some(Self {
-                obj: obj.as_borrowed(),
+                obj: unsafe { obj.as_borrowed().cast_unchecked::<PyFragment>() 
},
             })
         } else {
             None
@@ -43,10 +43,9 @@
     where
         S: Serializer,
     {
-        let fragment = self.obj.as_ptr().cast::<PyFragment>();
-        let data = unsafe {
-            Borrowed::from_ptr(self.obj.py(), 
(*fragment).data).cast_unchecked::<PyBytes>()
-        };
+        let py = self.obj.py();
+        let fragment = self.obj.get();
+        let data = fragment.data.bind(py);
 
         serializer.serialize_newtype_struct("", Bytes::new(data.as_bytes()))
     }

++++++ vendor.tar.zst ++++++
++++ 430036 lines of diff (skipped)

Reply via email to