summaryrefslogtreecommitdiffstats
path: root/Utilities/cmliblzma/liblzma/lz
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2021-04-22 19:39:58 (GMT)
committerBrad King <brad.king@kitware.com>2021-04-22 19:39:58 (GMT)
commite9065e96dc80ee62fa9bf9df559d0d8e6d8e0117 (patch)
tree108f8ef033665a2d5686004e3f8a6e2a1db3254e /Utilities/cmliblzma/liblzma/lz
parent741b85b42b4c8d826634b3f968d7de21df5f6c85 (diff)
parentee909a8e8b785b68c6a14fd52cc12b1841051a7d (diff)
downloadCMake-e9065e96dc80ee62fa9bf9df559d0d8e6d8e0117.zip
CMake-e9065e96dc80ee62fa9bf9df559d0d8e6d8e0117.tar.gz
CMake-e9065e96dc80ee62fa9bf9df559d0d8e6d8e0117.tar.bz2
Merge branch 'upstream-liblzma' into lzma-threads
* upstream-liblzma: liblzma 2020-03-17 (2327a461)
Diffstat (limited to 'Utilities/cmliblzma/liblzma/lz')
-rw-r--r--Utilities/cmliblzma/liblzma/lz/lz_decoder.c17
-rw-r--r--Utilities/cmliblzma/liblzma/lz/lz_encoder_hash.h2
-rw-r--r--Utilities/cmliblzma/liblzma/lz/lz_encoder_mf.c2
3 files changed, 13 insertions, 8 deletions
diff --git a/Utilities/cmliblzma/liblzma/lz/lz_decoder.c b/Utilities/cmliblzma/liblzma/lz/lz_decoder.c
index c708644..09b5743 100644
--- a/Utilities/cmliblzma/liblzma/lz/lz_decoder.c
+++ b/Utilities/cmliblzma/liblzma/lz/lz_decoder.c
@@ -91,11 +91,17 @@ decode_buffer(lzma_coder *coder,
in, in_pos, in_size);
// Copy the decoded data from the dictionary to the out[]
- // buffer.
+ // buffer. Do it conditionally because out can be NULL
+ // (in which case copy_size is always 0). Calling memcpy()
+ // with a null-pointer is undefined even if the third
+ // argument is 0.
const size_t copy_size = coder->dict.pos - dict_start;
assert(copy_size <= out_size - *out_pos);
- memcpy(out + *out_pos, coder->dict.buf + dict_start,
- copy_size);
+
+ if (copy_size > 0)
+ memcpy(out + *out_pos, coder->dict.buf + dict_start,
+ copy_size);
+
*out_pos += copy_size;
// Reset the dictionary if so requested by coder->lz.code().
@@ -125,8 +131,7 @@ decode_buffer(lzma_coder *coder,
static lzma_ret
-lz_decode(void *coder_ptr,
- const lzma_allocator *allocator lzma_attribute((__unused__)),
+lz_decode(void *coder_ptr, const lzma_allocator *allocator,
const uint8_t *restrict in, size_t *restrict in_pos,
size_t in_size, uint8_t *restrict out,
size_t *restrict out_pos, size_t out_size,
@@ -241,7 +246,7 @@ lzma_lz_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
if (lz_options.dict_size < 4096)
lz_options.dict_size = 4096;
- // Make dictionary size a multipe of 16. Some LZ-based decoders like
+ // Make dictionary size a multiple of 16. Some LZ-based decoders like
// LZMA use the lowest bits lzma_dict.pos to know the alignment of the
// data. Aligned buffer is also good when memcpying from the
// dictionary to the output buffer, since applications are
diff --git a/Utilities/cmliblzma/liblzma/lz/lz_encoder_hash.h b/Utilities/cmliblzma/liblzma/lz/lz_encoder_hash.h
index 342a333..fb15c58 100644
--- a/Utilities/cmliblzma/liblzma/lz/lz_encoder_hash.h
+++ b/Utilities/cmliblzma/liblzma/lz/lz_encoder_hash.h
@@ -39,7 +39,7 @@
// Endianness doesn't matter in hash_2_calc() (no effect on the output).
#ifdef TUKLIB_FAST_UNALIGNED_ACCESS
# define hash_2_calc() \
- const uint32_t hash_value = *(const uint16_t *)(cur)
+ const uint32_t hash_value = read16ne(cur)
#else
# define hash_2_calc() \
const uint32_t hash_value \
diff --git a/Utilities/cmliblzma/liblzma/lz/lz_encoder_mf.c b/Utilities/cmliblzma/liblzma/lz/lz_encoder_mf.c
index 7852077..d03657a 100644
--- a/Utilities/cmliblzma/liblzma/lz/lz_encoder_mf.c
+++ b/Utilities/cmliblzma/liblzma/lz/lz_encoder_mf.c
@@ -113,7 +113,7 @@ normalize(lzma_mf *mf)
// may be match finders that use larger resolution than one byte.
const uint32_t subvalue
= (MUST_NORMALIZE_POS - mf->cyclic_size);
- // & (~(UINT32_C(1) << 10) - 1);
+ // & ~((UINT32_C(1) << 10) - 1);
for (uint32_t i = 0; i < mf->hash_count; ++i) {
// If the distance is greater than the dictionary size,