From 8c947e9291691629714dafb4536c718b6cc24fbd Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Sat, 23 Oct 2010 12:30:54 +0300 Subject: [PATCH] liblzma: Make lzma_code() check the reserved members in lzma_stream. If any of the reserved members in lzma_stream are non-zero or non-NULL, LZMA_OPTIONS_ERROR is returned. It is possible that a new feature in the future is indicated by just setting a reserved member to some other value, so the old liblzma version need to catch it as an unsupported feature. --- src/liblzma/common/common.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/liblzma/common/common.c b/src/liblzma/common/common.c index 07b1d47..0408e15 100644 --- a/src/liblzma/common/common.c +++ b/src/liblzma/common/common.c @@ -182,6 +182,20 @@ lzma_code(lzma_stream *strm, lzma_action action) || !strm->internal->supported_actions[action]) return LZMA_PROG_ERROR; + // Check if unsupported members have been set to non-zero or non-NULL, + // which would indicate that some new feature is wanted. + if (strm->reserved_ptr1 != NULL + || strm->reserved_ptr2 != NULL + || strm->reserved_ptr3 != NULL + || strm->reserved_ptr4 != NULL + || strm->reserved_int1 != 0 + || strm->reserved_int2 != 0 + || strm->reserved_int3 != 0 + || strm->reserved_int4 != 0 + || strm->reserved_enum1 != LZMA_RESERVED_ENUM + || strm->reserved_enum2 != LZMA_RESERVED_ENUM) + return LZMA_OPTIONS_ERROR; + switch (strm->internal->sequence) { case ISEQ_RUN: switch (action) { -- 2.7.4