aboutsummaryrefslogtreecommitdiff
path: root/src/liblzma/common/index.h
diff options
context:
space:
mode:
authorJia Tan <jiat0218@gmail.com>2023-08-28 21:31:25 +0800
committerJia Tan <jiat0218@gmail.com>2023-10-26 06:22:24 +0800
commit68bda971bb8b666a009331455fcedb4e18d837a4 (patch)
tree50325c60a1dd52c2d06276ed7ac3b95def90544d /src/liblzma/common/index.h
parentTranslations: Update the Esperanto translation. (diff)
downloadxz-68bda971bb8b666a009331455fcedb4e18d837a4.tar.xz
liblzma: Add overflow check for Unpadded size in lzma_index_append().
This was not a security bug since there was no path to overflow UINT64_MAX in lzma_index_append() or when it calls index_file_size(). The bug was discovered by a failing assert() in vli_ceil4() when called from index_file_size() when unpadded_sum (the sum of the compressed size of current Stream and the unpadded_size parameter) exceeds LZMA_VLI_MAX. Previously, the unpadded_size parameter was checked to be not greater than UNPADDED_SIZE_MAX, but no check was done once compressed_base was added. This could not have caused an integer overflow in index_file_size() when called by lzma_index_append(). The calculation for file_size breaks down into the sum of: - Compressed base from all previous Streams - 2 * LZMA_STREAM_HEADER_SIZE (size of the current Streams header and footer) - stream_padding (can be set by lzma_index_stream_padding()) - Compressed base from the current Stream - Unpadded size (parameter to lzma_index_append()) The sum of everything except for Unpadded size must be less than LZMA_VLI_MAX. This is guarenteed by overflow checks in the functions that can set these values including lzma_index_stream_padding(), lzma_index_append(), and lzma_index_cat(). The maximum value for Unpadded size is enforced by lzma_index_append() to be less than or equal UNPADDED_SIZE_MAX. Thus, the sum cannot exceed UINT64_MAX since LZMA_VLI_MAX is half of UINT64_MAX. Thanks to Joona Kannisto for reporting this.
Diffstat (limited to 'src/liblzma/common/index.h')
0 files changed, 0 insertions, 0 deletions