From c9978ff155b6356274c518dab3c41ac31cbd76b7 Mon Sep 17 00:00:00 2001 From: Slava Zanko Date: Mon, 9 Nov 2009 13:42:27 +0200 Subject: [PATCH] Ticket #1798: Not enough magic read before checking for lzma files In the function get_compression_type() in src/util.c, only 5 bytes of the file are read into the magic array, but the test for lzma files checks the first 6 bytes in the magic array. Fix issue: now reads 6 bytes for correct recognize LZMA-files. Signed-off-by: Slava Zanko --- src/util.c | 48 ++++++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/src/util.c b/src/util.c index 44e21d9ea..f78c5edba 100644 --- a/src/util.c +++ b/src/util.c @@ -909,34 +909,30 @@ get_compression_type (int fd, const char * name) /* Support for LZMA (only utils format with magic in header). * This is the default format of LZMA utils 4.32.1 and later. */ - if (mc_read(fd, (char *) magic+4, 1) == 1) - { - /* LZMA utils format */ - if - ( magic[0] == 0xFF - && magic[1] == 'L' - && magic[2] == 'Z' - && magic[3] == 'M' - && magic[4] == 'A' - && magic[5] == 0x00 - ) - return COMPRESSION_LZMA; - } + if (mc_read(fd, (char *) magic+4, 2) != 2) + return COMPRESSION_NONE; + + /* LZMA utils format */ + if ( + magic[0] == 0xFF + && magic[1] == 'L' + && magic[2] == 'Z' + && magic[3] == 'M' + && magic[4] == 'A' + && magic[5] == 0x00 + ) + return COMPRESSION_LZMA; /* XZ compression magic */ - if (mc_read(fd, (char *) magic+5, 1) == 1) - { - if ( - magic[0] == 0xFD - && magic[1] == 0x37 - && magic[2] == 0x7A - && magic[3] == 0x58 - && magic[4] == 0x5A - && magic[5] == 0x00 - ){ - return COMPRESSION_XZ; - } - } + if ( + magic[0] == 0xFD + && magic[1] == 0x37 + && magic[2] == 0x7A + && magic[3] == 0x58 + && magic[4] == 0x5A + && magic[5] == 0x00 + ) + return COMPRESSION_XZ; str_len = strlen(name); /* HACK: we must belive to extention of LZMA file :) ...*/