aboutsummaryrefslogtreecommitdiff
path: root/src/liblzma/common/common.h
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2009-04-28 23:08:32 +0300
committerLasse Collin <lasse.collin@tukaani.org>2009-04-28 23:08:32 +0300
commit21c6b94373d239d7e86bd480fcd558e30391712f (patch)
tree072a944fecdd87fcd25a80a723d8b1d220d2f642 /src/liblzma/common/common.h
parentFix uint32_t -> size_t in ARM and ARM-Thumb filters. (diff)
downloadxz-21c6b94373d239d7e86bd480fcd558e30391712f.tar.xz
Fixed a crash in liblzma.
liblzma tries to avoid useless free()/malloc() pairs in initialization when multiple files are handled using the same lzma_stream. This didn't work with filter chains due to comparison of wrong pointers in lzma_next_coder_init(), making liblzma think that no memory reallocation is needed even when it actually is. Easy way to trigger this bug is to decompress two files with a single xz command. The first file should have e.g. x86+LZMA2 as the filter chain, and the second file just LZMA2.
Diffstat (limited to 'src/liblzma/common/common.h')
-rw-r--r--src/liblzma/common/common.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/liblzma/common/common.h b/src/liblzma/common/common.h
index ca75d506..de252604 100644
--- a/src/liblzma/common/common.h
+++ b/src/liblzma/common/common.h
@@ -240,9 +240,9 @@ do { \
/// next->init to func is still OK.
#define lzma_next_coder_init(func, next, allocator) \
do { \
- if ((uintptr_t)(&func) != (next)->init) \
+ if ((uintptr_t)(func) != (next)->init) \
lzma_next_end(next, allocator); \
- (next)->init = (uintptr_t)(&func); \
+ (next)->init = (uintptr_t)(func); \
} while (0)