From c6df3133264d3c3af1455571aca6ef24ba31a497 Mon Sep 17 00:00:00 2001 From: jgr Date: Fri, 21 Aug 2026 07:58:41 -0700 Subject: [PATCH] Fix use-after-free bug in RoaringBitmapIterator by retaining its source bitmap --- Sources/SwiftRoaring/RoaringBitmap.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Sources/SwiftRoaring/RoaringBitmap.swift b/Sources/SwiftRoaring/RoaringBitmap.swift index 367943e..bdc9e4c 100644 --- a/Sources/SwiftRoaring/RoaringBitmap.swift +++ b/Sources/SwiftRoaring/RoaringBitmap.swift @@ -928,7 +928,7 @@ public final class RoaringBitmap: Sequence, Equatable, CustomStringConvertible, /// @inlinable @inline(__always) public func makeIterator() -> RoaringBitmapIterator { - return RoaringBitmapIterator(ptr: self.ptr) + return RoaringBitmapIterator(bitmap: self) } /// @@ -939,10 +939,14 @@ public final class RoaringBitmap: Sequence, Equatable, CustomStringConvertible, @usableFromInline internal var i: roaring_uint32_iterator_t + @usableFromInline + internal let bitmap: RoaringBitmap + @inlinable @inline(__always) - init(ptr: UnsafePointer) { + init(bitmap: RoaringBitmap) { self.i = roaring_uint32_iterator_t() - roaring_iterator_init(ptr, &self.i) + roaring_iterator_init(bitmap.ptr, &self.i) + self.bitmap = bitmap } @inlinable @inline(__always)