File tree Expand file tree Collapse file tree 2 files changed +14
-3
lines changed
Expand file tree Collapse file tree 2 files changed +14
-3
lines changed Original file line number Diff line number Diff line change 1212except NameError : # python 3
1313 pass
1414
15- cdef croaring.roaring_bitmap_t * deserialize_ptr(char * buff):
15+ cdef croaring.roaring_bitmap_t * deserialize_ptr(bytes buff):
1616 cdef croaring.roaring_bitmap_t * ptr
17- ptr = croaring.roaring_bitmap_portable_deserialize(buff)
17+ cdef const char * reason_failure = NULL
18+ buff_size = len (buff)
19+ ptr = croaring.roaring_bitmap_portable_deserialize_safe(buff, buff_size)
20+ if ptr == NULL :
21+ raise ValueError (" Could not deserialize bitmap!!" )
22+ # Validate the bitmap
23+ if not croaring.roaring_bitmap_internal_validate(ptr, & reason_failure):
24+ # If validation fails, free the bitmap and raise an exception
25+ croaring.roaring_bitmap_free(ptr)
26+ raise ValueError (f" Invalid bitmap: {reason_failure.decode('utf-8')}" )
1827 return ptr
1928
2029cdef croaring.roaring64_bitmap_t * deserialize64_ptr(bytes buff):
@@ -744,7 +753,7 @@ cdef class AbstractBitMap:
744753
745754
746755 @classmethod
747- def deserialize (cls , char * buff ):
756+ def deserialize (cls , bytes buff ):
748757 """
749758 Generate a bitmap from the given serialization. See AbstractBitMap.serialize for the reverse operation.
750759
Original file line number Diff line number Diff line change @@ -100,6 +100,8 @@ cdef extern from "roaring.h":
100100 size_t roaring_bitmap_portable_size_in_bytes(const roaring_bitmap_t * ra)
101101 size_t roaring_bitmap_portable_serialize(const roaring_bitmap_t * ra, char * buf)
102102 roaring_bitmap_t * roaring_bitmap_portable_deserialize(const char * buf)
103+ roaring_bitmap_t * roaring_bitmap_portable_deserialize_safe(const char * buf, size_t maxbytes)
104+ bool roaring_bitmap_internal_validate(const roaring_bitmap_t * r, const char ** reason)
103105 roaring_uint32_iterator_t * roaring_iterator_create(const roaring_bitmap_t * ra)
104106 bool roaring_uint32_iterator_advance(roaring_uint32_iterator_t * it)
105107 uint32_t roaring_uint32_iterator_read(roaring_uint32_iterator_t * it, uint32_t* buf, uint32_t count)
You can’t perform that action at this time.
0 commit comments