fork download
  1. #!/usr/bin/env python3
  2. import sys, struct, zlib
  3.  
  4. MAX_CHUNK_SIZE = 100
  5.  
  6. def main():
  7. uncomp = (b'GQOLELNFJH@?AQE@LBA=?@N@<GJHE=EGE<FQOAM@?<IABT>EK'
  8. b'<=QFRPBSRGFRENSJLDFGD=LSRHIAO?FB@NP?DGDS>NGT@CCFPS'
  9. b'A@B=IGG<?JQBGBPLOPONU?IBBSNBK<QAFLGK@>H=CQ?BS><@UE'
  10. b'QGAKHML@>?JOSEQRCTP>S<?N>DNM@??ARJ>QUJSHLQN<P<>D==')
  11.  
  12. print("python", sys.version)
  13. print("zlib version", zlib.ZLIB_VERSION)
  14. print("zlib runtime version", zlib.ZLIB_RUNTIME_VERSION)
  15.  
  16. chunks = compress(uncomp)
  17. decomp = decompress(chunks)
  18. assert(uncomp == decomp)
  19.  
  20.  
  21. def compress(data):
  22. start_off = 0
  23. data_size = len(data)
  24. remaining = data_size
  25. res = []
  26. zdict = b''
  27.  
  28. while start_off < data_size:
  29. print("compress chunk %d"%len(res))
  30.  
  31. chunk_size = min(MAX_CHUNK_SIZE, remaining)
  32. chunk = data[start_off:start_off+chunk_size]
  33. c = b''
  34.  
  35. z = zlib.compressobj(wbits=-15, zdict=zdict)
  36. c += z.compress(chunk)
  37. c += z.flush(zlib.Z_FINISH)
  38.  
  39. res.append(c)
  40.  
  41. zdict = chunk
  42. start_off += chunk_size
  43. remaining -= chunk_size
  44.  
  45. return res
  46.  
  47. def decompress(chunks):
  48. zdict = b''
  49. res = []
  50.  
  51. for i, c in enumerate(chunks):
  52. print("decompress chunk %d"%i)
  53. out = b''
  54.  
  55. z = zlib.decompressobj(wbits=-15, zdict=zdict)
  56. out += z.decompress(c)
  57. out += z.flush()
  58. zdict = out
  59.  
  60. res.append(out)
  61.  
  62. return b''.join(res)
  63.  
  64.  
  65. if __name__ == '__main__':
  66. main()
  67.  
Runtime error #stdin #stdout #stderr 0.01s 9992KB
stdin
Standard input is empty
stdout
python 3.4.3+ (default, Jun  2 2015, 14:09:35) 
[GCC 4.9.2]
zlib version 1.2.8
zlib runtime version 1.2.8
compress chunk 0
compress chunk 1
decompress chunk 0
decompress chunk 1
stderr
Traceback (most recent call last):
  File "./prog.py", line 66, in <module>
  File "./prog.py", line 17, in main
  File "./prog.py", line 56, in decompress
zlib.error: Error -3 while decompressing data: invalid distance too far back