Merge pull request #2061 from Amanieu/fix_indices
Avoid UB in PySlice::indices
This commit is contained in:
commit
6033d696b1
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue