@@ -412,11 +412,16 @@ cdef class Decompress:
412412 if err != COMP_OK:
413413 check_isal_deflate_rc(err)
414414 self .obuflen = DEF_BUF_SIZE
415+ self .obuf = < unsigned char * > PyMem_Malloc(self .obuflen * sizeof(char ))
415416 self .unused_data = b" "
416417 self .unconsumed_tail = b" "
417418 self .eof = 0
418419 self .is_initialised = 1
419420
421+ def __dealloc__ (self ):
422+ if self .obuf is not NULL :
423+ PyMem_Free(self .obuf)
424+
420425 cdef save_unconsumed_input(self , Py_buffer * data):
421426 cdef Py_ssize_t old_size, new_size, left_size
422427 cdef bytes new_data
@@ -457,7 +462,6 @@ cdef class Decompress:
457462 cdef int err
458463
459464 # Initialise output buffer
460- cdef unsigned char * obuf = < unsigned char * > PyMem_Malloc(self .obuflen * sizeof(char ))
461465 out = []
462466
463467 cdef bint last_round = 0
@@ -467,7 +471,7 @@ cdef class Decompress:
467471 while True :
468472 arrange_input_buffer(& self .stream, & ibuflen)
469473 while (self .stream.avail_out == 0 or self .stream.avail_in != 0 ):
470- self .stream.next_out = obuf # Reset output buffer.
474+ self .stream.next_out = self . obuf # Reset output buffer.
471475 if total_bytes >= max_length:
472476 break
473477 elif total_bytes + self .obuflen >= max_length:
@@ -486,15 +490,14 @@ cdef class Decompress:
486490 check_isal_inflate_rc(err)
487491 bytes_written = prev_avail_out - self .stream.avail_out
488492 total_bytes += bytes_written
489- out.append(obuf[:bytes_written])
493+ out.append(self . obuf[:bytes_written])
490494 if self .stream.block_state == ISAL_BLOCK_FINISH or last_round:
491495 break
492496 if self .stream.block_state == ISAL_BLOCK_FINISH or ibuflen == 0 :
493497 break
494498 self .save_unconsumed_input(buffer )
495499 return b" " .join(out)
496500 finally :
497- PyMem_Free(obuf)
498501 PyBuffer_Release(buffer )
499502
500503 def flush (self , Py_ssize_t length = DEF_BUF_SIZE):
0 commit comments