~ubuntu-branches/ubuntu/jaunty/clamav/jaunty-security

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 *  Copyright (C) 2007-2008 Sourcefire, Inc.
 *
 *  Authors: Alberto Wu
 *
 *  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 *);
int cli_unzip_single(int, cli_ctx *, off_t);

#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 */