Function zstd_safe::find_decompressed_size[][src]

pub fn find_decompressed_size(src: &[u8]) -> u64

ZSTD_findDecompressedSize()

src should point the start of a series of ZSTD encoded and/or skippable frames

srcSize must be the exact size of this series (i.e. there should be a frame boundary exactly srcSize bytes after src)

Returns the decompressed size of all data in the contained frames, as a 64-bit value if known

  • if the decompressed size cannot be determined: ZSTD_CONTENTSIZE_UNKNOWN
  • if an error occurred: ZSTD_CONTENTSIZE_ERROR

note 1 : decompressed size is an optional field, that may not be present, especially in streaming mode. When return==ZSTD_CONTENTSIZE_UNKNOWN, data to decompress could be any size. In which case, it's necessary to use streaming mode to decompress data. Optionally, application can still use ZSTD_decompress() while relying on implied limits. (For example, data may be necessarily cut into blocks <= 16 KB).

note 2 : decompressed size is always present when compression is done with ZSTD_compress()

note 3 : decompressed size can be very large (64-bits value), potentially larger than what local system can handle as a single memory segment. In which case, it's necessary to use streaming mode to decompress data.

note 4 : If source is untrusted, decompressed size could be wrong or intentionally modified. Always ensure result fits within application's authorized limits. Each application can set its own limits.

note 5 : ZSTD_findDecompressedSize handles multiple frames, and so it must traverse the input to read each contained frame header. This is efficient as most of the data is skipped, however it does mean that all frame data must be present and valid.