From 1fb20dab91068b44fa0b0bda79052de00d2c6980 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Mon, 20 Dec 2021 18:28:36 +0100 Subject: [PATCH 1/2] Avoid UB in PySlice::indices Mutating a variables that is not declared with `mut` is undefined behavior. --- src/types/slice.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/types/slice.rs b/src/types/slice.rs index 6187e26adbe..90cd09da45c 100644 --- a/src/types/slice.rs +++ b/src/types/slice.rs @@ -57,17 +57,17 @@ impl PySlice { pub fn indices(&self, length: c_long) -> PyResult { // non-negative Py_ssize_t should always fit into Rust usize unsafe { - let slicelength: isize = 0; - let start: isize = 0; - let stop: isize = 0; - let step: isize = 0; + let mut slicelength: isize = 0; + let mut start: isize = 0; + let mut stop: isize = 0; + let mut step: isize = 0; let r = ffi::PySlice_GetIndicesEx( self.as_ptr(), length as Py_ssize_t, - &start as *const _ as *mut _, - &stop as *const _ as *mut _, - &step as *const _ as *mut _, - &slicelength as *const _ as *mut _, + &mut start, + &mut stop, + &mut step, + &mut slicelength, ); if r == 0 { Ok(PySliceIndices { From ed0a6b710ae731ad9c9ae6567d278c0624b0ddff Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Mon, 20 Dec 2021 18:34:14 +0100 Subject: [PATCH 2/2] Add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c15ec83ffbf..c39cdb45ca4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix undefined symbol for `PyObject_HasAttr` on PyPy. [#2025](https://github.com/PyO3/pyo3/pull/2025) - Fix memory leak in `PyErr::into_value`. [#2026](https://github.com/PyO3/pyo3/pull/2026) - Fix clippy warning `needless-option-as-deref` in code generated by `#[pyfunction]` and `#[pymethods]`. [#2040](https://github.com/PyO3/pyo3/pull/2040) +- Fix undefined behavior in `PySlice::indices`. [#2061](https://github.com/PyO3/pyo3/pull/2061) ## [0.15.1] - 2021-11-19