@@ -15,6 +15,9 @@ from .abc import Codec
1515
1616from  libc.stdlib cimport malloc, realloc, free
1717
18+ cdef extern from  " stdint.h"  :
19+     cdef size_t SIZE_MAX
20+ 
1821cdef extern from  " zstd.h"  :
1922
2023    unsigned  ZSTD_versionNumber() nogil
@@ -129,7 +132,7 @@ def compress(source, int level=DEFAULT_CLEVEL, bint checksum=False):
129132        level =  MAX_CLEVEL
130133
131134    #  obtain source memoryview
132-     source_mv =  ensure_contiguous_memoryview (source)
135+     source_mv =  ensure_continguous_memoryview (source)
133136    source_pb =  PyMemoryView_GET_BUFFER(source_mv)
134137
135138    #  setup source buffer
@@ -206,7 +209,7 @@ def decompress(source, dest=None):
206209        unsigned  long  long  content_size
207210
208211    #  obtain source memoryview
209-     source_mv =  ensure_contiguous_memoryview (source)
212+     source_mv =  ensure_continguous_memoryview (source)
210213    source_pb =  PyMemoryView_GET_BUFFER(source_mv)
211214
212215    #  get source pointer
@@ -218,6 +221,8 @@ def decompress(source, dest=None):
218221        content_size =  ZSTD_getFrameContentSize(source_ptr, source_size)
219222        if  content_size ==  ZSTD_CONTENTSIZE_UNKNOWN and  dest is  None :
220223            return  stream_decompress(source_pb)
224+         elif  content_size ==  ZSTD_CONTENTSIZE_UNKNOWN:
225+             #  dest is not None
221226        elif  content_size ==  ZSTD_CONTENTSIZE_ERROR or  content_size ==  0 :
222227            raise  RuntimeError (' Zstd decompression error: invalid input data'  )
223228        elif  content_size >  (< unsigned  long  long > SIZE_MAX):
@@ -227,6 +232,7 @@ def decompress(source, dest=None):
227232
228233        #  setup destination buffer
229234        if  dest is  None :
235+             #  allocate memory
230236            dest_1d =  dest =  PyBytes_FromStringAndSize(NULL , dest_size)
231237        else :
232238            dest_1d =  ensure_contiguous_ndarray(dest)
@@ -237,6 +243,9 @@ def decompress(source, dest=None):
237243        dest_ptr =  < char * > dest_pb.buf
238244        dest_nbytes =  dest_pb.len
239245
246+         if  content_size ==  ZSTD_CONTENTSIZE_UNKNOWN:
247+             dest_size =  dest_nbytes
248+ 
240249        #  validate output buffer
241250        if  dest_nbytes <  dest_size:
242251            raise  ValueError (' destination buffer too small; expected at least %s , ' 
@@ -404,4 +413,4 @@ class Zstd(Codec):
404413    @classmethod  
405414    def  max_level (cls ):
406415        """ Returns the maximum compression level of the underlying zstd library.""" 
407-         return  ZSTD_maxCLevel()
416+         return  ZSTD_maxCLevel()
0 commit comments