diff -r f94c10334bcb -r 24d3298189d7 rust/hg-cpython/src/revlog.rs --- a/rust/hg-cpython/src/revlog.rs Sun Oct 29 12:18:03 2023 +0100 +++ b/rust/hg-cpython/src/revlog.rs Thu Nov 23 03:41:58 2023 +0100 @@ -42,6 +42,7 @@ ) -> PyResult> { let midx = index.extract::(py)?; let leaked = midx.index(py).leak_immutable(); + // Safety: we don't leak the "faked" reference out of the `UnsafePyLeaked` Ok(unsafe { leaked.map(py, |idx| PySharedIndex { inner: idx }) }) } @@ -975,6 +976,7 @@ /// been meanwhile mutated. def is_invalidated(&self) -> PyResult { let leaked = self.index(py).borrow(); + // Safety: we don't leak the "faked" reference out of `UnsafePyLeaked` let result = unsafe { leaked.try_borrow(py) }; // two cases for result to be an error: // - the index has previously been mutably borrowed @@ -986,6 +988,7 @@ def insert(&self, rev: PyRevision) -> PyResult { let leaked = self.index(py).borrow(); + // Safety: we don't leak the "faked" reference out of `UnsafePyLeaked` let index = &*unsafe { leaked.try_borrow(py)? }; let rev = UncheckedRevision(rev.0); @@ -1020,6 +1023,7 @@ let nt = self.nt(py).borrow(); let leaked = self.index(py).borrow(); + // Safety: we don't leak the "faked" reference out of `UnsafePyLeaked` let index = &*unsafe { leaked.try_borrow(py)? }; Ok(nt.find_bin(index, prefix) @@ -1031,6 +1035,7 @@ def shortest(&self, node: PyBytes) -> PyResult { let nt = self.nt(py).borrow(); let leaked = self.index(py).borrow(); + // Safety: we don't leak the "faked" reference out of `UnsafePyLeaked` let idx = &*unsafe { leaked.try_borrow(py)? }; match nt.unique_prefix_len_node(idx, &node_from_py_bytes(py, &node)?) {