moduzlib: Implement raw DEFLATE decoding support.

This commit is contained in:
Paul Sokolovsky 2015-01-28 02:10:53 +02:00
parent 0b3014ce3a
commit 2324f3ef29
2 changed files with 14 additions and 1 deletions

View File

@ -68,7 +68,12 @@ STATIC mp_obj_t mod_uzlib_decompress(mp_uint_t n_args, const mp_obj_t *args) {
decomp->destGrow = mod_uzlib_grow_buf; decomp->destGrow = mod_uzlib_grow_buf;
decomp->source = bufinfo.buf; decomp->source = bufinfo.buf;
int st = tinf_zlib_uncompress_dyn(decomp, bufinfo.len); int st;
if (n_args > 1 && MP_OBJ_SMALL_INT_VALUE(args[1]) < 0) {
st = tinf_uncompress_dyn(decomp);
} else {
st = tinf_zlib_uncompress_dyn(decomp, bufinfo.len);
}
if (st != 0) { if (st != 0) {
nlr_raise(mp_obj_new_exception_arg1(&mp_type_ValueError, MP_OBJ_NEW_SMALL_INT(st))); nlr_raise(mp_obj_new_exception_arg1(&mp_type_ValueError, MP_OBJ_NEW_SMALL_INT(st)));
} }

View File

@ -14,3 +14,11 @@ PATTERNS = [
for unpacked, packed in PATTERNS: for unpacked, packed in PATTERNS:
assert zlib.decompress(packed) == unpacked assert zlib.decompress(packed) == unpacked
print(unpacked) print(unpacked)
# Raw DEFLATE bitstream
v = b'\xcbH\xcd\xc9\xc9\x07\x00\x86\xa6\x106\x05\x00\x00\x00'
exp = b"hello"
out = zlib.decompress(v, -15)
assert(out == exp)
print(exp)