summaryrefslogtreecommitdiff
path: root/archival/libunarchive/unxz/xz_dec_stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'archival/libunarchive/unxz/xz_dec_stream.c')
-rw-r--r--archival/libunarchive/unxz/xz_dec_stream.c35
1 files changed, 10 insertions, 25 deletions
diff --git a/archival/libunarchive/unxz/xz_dec_stream.c b/archival/libunarchive/unxz/xz_dec_stream.c
index e10c941..121c3b5 100644
--- a/archival/libunarchive/unxz/xz_dec_stream.c
+++ b/archival/libunarchive/unxz/xz_dec_stream.c
@@ -365,16 +365,14 @@ static enum xz_ret XZ_FUNC dec_stream_header(struct xz_dec *s)
/*
* Decode the Stream Flags field. Of integrity checks, we support
* only none (Check ID = 0) and CRC32 (Check ID = 1).
+ * We also accept CRC64 and SHA-256, but they will not be verified.
*/
if (s->temp.buf[HEADER_MAGIC_SIZE] != 0
- || (s->temp.buf[HEADER_MAGIC_SIZE + 1] > 1
- && s->temp.buf[HEADER_MAGIC_SIZE + 1] != 0x04
- && s->temp.buf[HEADER_MAGIC_SIZE + 1] != 0x0A
- )
+ || (s->temp.buf[HEADER_MAGIC_SIZE + 1] > 1
+ && s->temp.buf[HEADER_MAGIC_SIZE + 1] != 0x04 /* CRC64 */
+ && s->temp.buf[HEADER_MAGIC_SIZE + 1] != 0x0A /* SHA-256 */
+ )
) {
- XZ_DEBUG_MSG("unsupported stream flags %x:%x",
- s->temp.buf[HEADER_MAGIC_SIZE],
- s->temp.buf[HEADER_MAGIC_SIZE+1]);
return XZ_OPTIONS_ERROR;
}
@@ -435,10 +433,7 @@ static enum xz_ret XZ_FUNC dec_block_header(struct xz_dec *s)
#else
if (s->temp.buf[1] & 0x3F)
#endif
- {
- XZ_DEBUG_MSG("s->temp.buf[1] & 0x3E/3F != 0");
return XZ_OPTIONS_ERROR;
- }
/* Compressed Size */
if (s->temp.buf[1] & 0x40) {
@@ -466,10 +461,8 @@ static enum xz_ret XZ_FUNC dec_block_header(struct xz_dec *s)
/* If there are two filters, the first one must be a BCJ filter. */
s->bcj_active = s->temp.buf[1] & 0x01;
if (s->bcj_active) {
- if (s->temp.size - s->temp.pos < 2) {
- XZ_DEBUG_MSG("temp.size - temp.pos < 2");
+ if (s->temp.size - s->temp.pos < 2)
return XZ_OPTIONS_ERROR;
- }
ret = xz_dec_bcj_reset(s->bcj, s->temp.buf[s->temp.pos++]);
if (ret != XZ_OK)
@@ -479,10 +472,8 @@ static enum xz_ret XZ_FUNC dec_block_header(struct xz_dec *s)
* We don't support custom start offset,
* so Size of Properties must be zero.
*/
- if (s->temp.buf[s->temp.pos++] != 0x00) {
- XZ_DEBUG_MSG("size of properties != 0");
+ if (s->temp.buf[s->temp.pos++] != 0x00)
return XZ_OPTIONS_ERROR;
- }
}
#endif
@@ -491,16 +482,12 @@ static enum xz_ret XZ_FUNC dec_block_header(struct xz_dec *s)
return XZ_DATA_ERROR;
/* Filter ID = LZMA2 */
- if (s->temp.buf[s->temp.pos++] != 0x21) {
- XZ_DEBUG_MSG("filter ID != 0x21");
+ if (s->temp.buf[s->temp.pos++] != 0x21)
return XZ_OPTIONS_ERROR;
- }
/* Size of Properties = 1-byte Filter Properties */
- if (s->temp.buf[s->temp.pos++] != 0x01) {
- XZ_DEBUG_MSG("size of properties != 1");
+ if (s->temp.buf[s->temp.pos++] != 0x01)
return XZ_OPTIONS_ERROR;
- }
/* Filter Properties contains LZMA2 dictionary size. */
if (s->temp.size - s->temp.pos < 1)
@@ -512,10 +499,8 @@ static enum xz_ret XZ_FUNC dec_block_header(struct xz_dec *s)
/* The rest must be Header Padding. */
while (s->temp.pos < s->temp.size)
- if (s->temp.buf[s->temp.pos++] != 0x00) {
- XZ_DEBUG_MSG("padding is not zero-filled");
+ if (s->temp.buf[s->temp.pos++] != 0x00)
return XZ_OPTIONS_ERROR;
- }
s->temp.pos = 0;
s->block.compressed = 0;