git-svn: trunk@3803
Tomasz Kojm authored on 2008/04/21 23:58:36... | ... |
@@ -1,3 +1,7 @@ |
1 |
+Mon Apr 21 16:21:56 CEST 2008 (tk) |
|
2 |
+---------------------------------- |
|
3 |
+ * libclamav/cvd.c: add work-around for zlib issues with mixed data (bb#932) |
|
4 |
+ |
|
1 | 5 |
Mon Apr 21 11:28:38 CEST 2008 (tk) |
2 | 6 |
---------------------------------- |
3 | 7 |
* libclamav/others.h: explicitely cast some constants (bb#936) |
... | ... |
@@ -183,24 +183,34 @@ static int cli_tgzload(int fd, struct cl_engine **engine, unsigned int *signo, u |
183 | 183 |
char osize[13], name[101]; |
184 | 184 |
char block[TAR_BLOCKSIZE]; |
185 | 185 |
int nread, fdd, ret; |
186 |
- unsigned int type, size, pad; |
|
186 |
+ unsigned int type, size, pad, compr = 1; |
|
187 | 187 |
gzFile *infile; |
188 | 188 |
z_off_t off; |
189 | 189 |
|
190 | 190 |
|
191 | 191 |
cli_dbgmsg("in cli_tgzload()\n"); |
192 | 192 |
|
193 |
+ lseek(fd, 512, SEEK_SET); |
|
194 |
+ if(cli_readn(fd, block, 7) != 7) |
|
195 |
+ return CL_EFORMAT; /* truncated file? */ |
|
196 |
+ |
|
197 |
+ if(!strncmp(block, "COPYING", 7)) |
|
198 |
+ compr = 0; |
|
199 |
+ |
|
193 | 200 |
if((fdd = dup(fd)) == -1) { |
194 | 201 |
cli_errmsg("cli_tgzload: Can't duplicate descriptor %d\n", fd); |
195 | 202 |
return CL_EIO; |
196 | 203 |
} |
197 | 204 |
|
205 |
+ lseek(fdd, 512, SEEK_SET); |
|
206 |
+ |
|
198 | 207 |
if((infile = gzdopen(fdd, "rb")) == NULL) { |
199 | 208 |
cli_errmsg("cli_tgzload: Can't gzdopen() descriptor %d, errno = %d\n", fdd, errno); |
200 | 209 |
return CL_EIO; |
201 | 210 |
} |
202 | 211 |
|
203 |
- gzseek(infile, 512, SEEK_SET); |
|
212 |
+ if(!compr) |
|
213 |
+ gzseek(infile, 512, SEEK_SET); |
|
204 | 214 |
|
205 | 215 |
while(1) { |
206 | 216 |
|