ClamAV is an open source (GPLv2) anti-virus toolkit.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
clamav/libclamav/unzip.h

148 lines
4.3 KiB

/*
* Copyright (C) 2007 Sourcefire Inc.
* Author: aCaB <acab@clamav.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#ifndef __UNZIP_H
#define __UNZIP_H
#if HAVE_CONFIG_H
#include "clamav-config.h"
#endif
#include "others.h"
int cli_unzip(int, cli_ctx *);
#if HAVE_MMAP
int cli_unzip_single(int, cli_ctx *, off_t);
#else
#define cli_unzip_single(a,b,c) cli_unzip((a),(b))
#endif /* HAVE_MMAP */
#ifdef UNZIP_PRIVATE
#define F_ENCR (1<<0)
#define F_ALGO1 (1<<1)
#define F_ALGO2 (1<<2)
#define F_USEDD (1<<3)
#define F_RSVD1 (1<<4)
#define F_PATCH (1<<5)
#define F_STRNG (1<<6)
#define F_UNUS1 (1<<7)
#define F_UNUS2 (1<<8)
#define F_UNUS3 (1<<9)
#define F_UNUS4 (1<<10)
#define F_UTF8 (1<<11)
#define F_RSVD2 (1<<12)
#define F_MSKED (1<<13)
#define F_RSVD3 (1<<14)
#define F_RSVD4 (1<<15)
enum ALGO {
ALG_STORED,
ALG_SHRUNK,
ALG_REDUCE1,
ALG_REDUCE2,
ALG_REDUCE3,
ALG_REDUCE4,
ALG_IMPLODE,
ALG_TOKENZD,
ALG_DEFLATE,
ALG_DEFLATE64,
ALG_OLDTERSE,
ALG_RSVD1,
ALG_BZIP2,
ALG_RSVD2,
ALG_LZMA,
ALG_RSVD3,
ALG_RSVD4,
ALG_RSVD5,
ALG_NEWTERSE,
ALG_LZ77,
ALG_WAVPACK = 97,
ALG_PPMD
};
/* struct LH { */
/* uint32_t magic; */
/* uint16_t version; */
/* uint16_t flags; */
/* uint16_t method; */
/* uint32_t mtime; */
/* uint32_t crc32; */
/* uint32_t csize; */
/* uint32_t usize; */
/* uint16_t flen; */
/* uint16_t elen; */
/* char fname[flen] */
/* char extra[elen] */
/* } __attribute__((packed)); */
#define LH_magic ((uint32_t)cli_readint32((uint8_t *)(lh)+0))
#define LH_version ((uint16_t)cli_readint16((uint8_t *)(lh)+4))
#define LH_flags ((uint16_t)cli_readint16((uint8_t *)(lh)+6))
#define LH_method ((uint16_t)cli_readint16((uint8_t *)(lh)+8))
#define LH_mtime ((uint32_t)cli_readint32((uint8_t *)(lh)+10))
#define LH_crc32 ((uint32_t)cli_readint32((uint8_t *)(lh)+14))
#define LH_csize ((uint32_t)cli_readint32((uint8_t *)(lh)+18))
#define LH_usize ((uint32_t)cli_readint32((uint8_t *)(lh)+22))
#define LH_flen ((uint16_t)cli_readint16((uint8_t *)(lh)+26))
#define LH_elen ((uint16_t)cli_readint16((uint8_t *)(lh)+28))
#define SIZEOF_LH 30
/* struct CH { */
/* uint32_t magic; */
/* uint16_t vermade; */
/* uint16_t verneed; */
/* uint16_t flags; */
/* uint16_t method; */
/* uint32_t mtime; */
/* uint32_t crc32; */
/* uint32_t csize; */
/* uint32_t usize; */
/* uint16_t flen; */
/* uint16_t elen; */
/* uint16_t clen; */
/* uint16_t dsk; */
/* uint16_t iattrib; */
/* uint32_t eattrib; */
/* uint32_t off; */
/* char fname[flen] */
/* char extra[elen] */
/* char comment[clen] */
/* } __attribute__((packed)); */
#define CH_magic ((uint32_t)cli_readint32((uint8_t *)(ch)+0))
#define CH_vermade ((uint16_t)cli_readint16((uint8_t *)(ch)+4))
#define CH_verneed ((uint16_t)cli_readint16((uint8_t *)(ch)+6))
#define CH_flags ((uint16_t)cli_readint16((uint8_t *)(ch)+8))
#define CH_method ((uint16_t)cli_readint16((uint8_t *)(ch)+10))
#define CH_mtime ((uint32_t)cli_readint32((uint8_t *)(ch)+12))
#define CH_crc32 ((uint32_t)cli_readint32((uint8_t *)(ch)+16))
#define CH_csize ((uint32_t)cli_readint32((uint8_t *)(ch)+20))
#define CH_usize ((uint32_t)cli_readint32((uint8_t *)(ch)+24))
#define CH_flen ((uint16_t)cli_readint16((uint8_t *)(ch)+28))
#define CH_elen ((uint16_t)cli_readint16((uint8_t *)(ch)+30))
#define CH_clen ((uint16_t)cli_readint16((uint8_t *)(ch)+32))
#define CH_dsk ((uint16_t)cli_readint16((uint8_t *)(ch)+34))
#define CH_iattrib ((uint16_t)cli_readint16((uint8_t *)(ch)+36))
#define CH_eattrib ((uint32_t)cli_readint32((uint8_t *)(ch)+38))
#define CH_off ((uint32_t)cli_readint32((uint8_t *)(ch)+42))
#define SIZEOF_CH 46
#endif /* UNZIP_PRIVATE */
#endif /* __UNZIP_H */