GzipSwift icon indicating copy to clipboard operation
GzipSwift copied to clipboard

gunzippedData returns nil for large NSData

Open sriramkay opened this issue 10 years ago • 4 comments

I tried using this code to uncompress(gunzip) gzipped NSData in swift. Gunzip works fine when the gzipped NSData is smaller in size (eg. 653 bytes), however fails (returns nil) for larger NSData (eg. 9491 bytes).

Could you please let me know the fix for this?

sriramkay avatar Jul 27 '15 12:07 sriramkay

I'm not sure how helpful this will be but have you tried checking the result of the call to "deflateInit2_" function in the "gzippedData" function?

Perhaps it is returning something other than "Z_OK" and thus returning "nil." For example, maybe you're actually getting an "Insufficient memory available" error: http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/zlib-deflateinit2.html.

Just from looking at the source code, it's either that or you're not actually loading any data and so "self.length" is 0 in the "gzippedData" function.

oekekezie avatar Jul 29 '15 07:07 oekekezie

Yes. It is not returning the status as "Z_OK", instead "Z_DATA_ERROR" only for larger NSData. Is there a way, we could identify the data error description?

sriramkay avatar Jul 31 '15 12:07 sriramkay

Hi, I've just improved the extension:

  • to return just a empty NSData instead of nil when the given NSData instance has zero-length
  • to print error message if compression/decompression is failed

I hope it is some kind helpful to identify your problem. (And sorry, I couldn't reproduce your matter. Under my environment, even larger file, for example 18 KB, can be compressed/decompressed)

Just printing error message is of course not a good solution. However I have a plan to integrate the throw error handling on Swift 2.0. So, I don't wanna make change at the moment.

1024jp avatar Aug 02 '15 10:08 1024jp

Hi, Thanks for the error message addition. The error message says "Decompression failed: incorrect data check". Does it mean for checksum integrity?

Additional notes:

  1. The input NSData contains the gzipped image data.
  2. Input data starts with 1f8b (magic number of gzip data).
  3. The gzip was done on Android code and we are trying to gunzip in iOS Swift.
  4. Larger data zipped from iOS does not have any problem while gunzip.

Let me know if you have any suggestions on this.

Thanks.

sriramkay avatar Aug 03 '15 06:08 sriramkay