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.
This commit is contained in:
Lasse Collin 2010-10-23 12:30:54 +03:00
parent e61d85e082
commit 8c947e9291
1 changed files with 14 additions and 0 deletions

View File

@ -182,6 +182,20 @@ lzma_code(lzma_stream *strm, lzma_action action)
|| !strm->internal->supported_actions[action]) || !strm->internal->supported_actions[action])
return LZMA_PROG_ERROR; 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) { switch (strm->internal->sequence) {
case ISEQ_RUN: case ISEQ_RUN:
switch (action) { switch (action) {