@@ -34,7 +34,7 @@ import (
3434// deserialization. This prevents CPU/memory exhaustion from absurd counts
3535// in malformed input. Derived from puffin.DefaultMaxBlobSize / 8 (minimum
3636// per-bitmap overhead: 4-byte key + at least 4 bytes of roaring data).
37- var maxBitmapCount = int64 (puffin .DefaultMaxBlobSize / 8 )
37+ var maxBitmapCount = uint64 (puffin .DefaultMaxBlobSize / 8 )
3838
3939// RoaringPositionBitmap supports 64-bit positions using a sparse map of
4040// 32-bit Roaring bitmaps. Positions are split into a 32-bit key
@@ -53,9 +53,7 @@ func NewRoaringPositionBitmap() *RoaringPositionBitmap {
5353}
5454
5555// Set marks a position in the bitmap.
56- // Position must be non-negative.
5756func (b * RoaringPositionBitmap ) Set (pos uint64 ) {
58-
5957 key := uint32 (pos >> 32 )
6058 low := uint32 (pos )
6159 bm , ok := b .bitmaps [key ]
@@ -127,13 +125,10 @@ func (b *RoaringPositionBitmap) Serialize(w io.Writer) error {
127125func DeserializeRoaringPositionBitmap (data []byte ) (* RoaringPositionBitmap , error ) {
128126 r := bytes .NewReader (data )
129127
130- var count int64
128+ var count uint64
131129 if err := binary .Read (r , binary .LittleEndian , & count ); err != nil {
132130 return nil , fmt .Errorf ("read bitmap count: %w" , err )
133131 }
134- if count < 0 {
135- return nil , fmt .Errorf ("invalid bitmap count: %d" , count )
136- }
137132 if count > maxBitmapCount {
138133 return nil , fmt .Errorf ("bitmap count %d exceeds maximum allowed %d" , count , maxBitmapCount )
139134 }
0 commit comments