Merge pull request #2061 from Amanieu/fix_indices

Avoid UB in PySlice::indices
This commit is contained in:
David Hewitt 2021-12-20 19:53:37 +00:00 committed by GitHub
commit 6033d696b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 8 deletions

View File

@ -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 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 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 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 ## [0.15.1] - 2021-11-19

View File

@ -57,17 +57,17 @@ impl PySlice {
pub fn indices(&self, length: c_long) -> PyResult<PySliceIndices> { pub fn indices(&self, length: c_long) -> PyResult<PySliceIndices> {
// non-negative Py_ssize_t should always fit into Rust usize // non-negative Py_ssize_t should always fit into Rust usize
unsafe { unsafe {
let slicelength: isize = 0; let mut slicelength: isize = 0;
let start: isize = 0; let mut start: isize = 0;
let stop: isize = 0; let mut stop: isize = 0;
let step: isize = 0; let mut step: isize = 0;
let r = ffi::PySlice_GetIndicesEx( let r = ffi::PySlice_GetIndicesEx(
self.as_ptr(), self.as_ptr(),
length as Py_ssize_t, length as Py_ssize_t,
&start as *const _ as *mut _, &mut start,
&stop as *const _ as *mut _, &mut stop,
&step as *const _ as *mut _, &mut step,
&slicelength as *const _ as *mut _, &mut slicelength,
); );
if r == 0 { if r == 0 {
Ok(PySliceIndices { Ok(PySliceIndices {