moduzlib: Implement raw DEFLATE decoding support.
This commit is contained in:
parent
0b3014ce3a
commit
2324f3ef29
@ -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)));
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user