diff --git a/CHANGELOG.md b/CHANGELOG.md index c15ec83f..c39cdb45 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 diff --git a/src/types/slice.rs b/src/types/slice.rs index 6187e26a..90cd09da 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 {