Browse code

add work-around for zlib issues with mixed data (bb#932)

git-svn: trunk@3803

Tomasz Kojm authored on 2008/04/21 23:58:36
Showing 2 changed files
... ...
@@ -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