Browse code

handle some deflate64 compressed files

git-svn: trunk@2810

Tomasz Kojm authored on 2007/02/19 01:01:56
Showing 2 changed files
... ...
@@ -1,7 +1,13 @@
1
+Sun Feb 18 15:03:37 CET 2007 (tk)
2
+---------------------------------
3
+  * libclamav/unzip.c: handle some deflate64 compressed files
4
+
1 5
 Sat Feb 17 11:20:17 CET 2007 (edwin)
6
+------------------------------------
2 7
   * libclamav/entconv.c: Don't normalize buffer shorter than 2 bytes.
3 8
 
4 9
 Sat Feb 17 11:20:17 CET 2007 (edwin)
10
+------------------------------------
5 11
   * libclamav/rtf.c: Fix possible memory leak, and add more sanity checks.
6 12
 
7 13
 Sat Feb 17 02:34:17 CET 2007 (acab)
... ...
@@ -480,6 +480,7 @@ zip_file *zip_file_open(zip_dir *dir, const char *name, int d_off)
480 480
 	    switch (hdr->d_compr) {
481 481
 		case ZIP_METHOD_STORED:
482 482
 		case ZIP_METHOD_DEFLATED:
483
+		case ZIP_METHOD_DEFLATED64:
483 484
 		    break;
484 485
 
485 486
 		case ZIP_METHOD_SHRUNK:
... ...
@@ -489,7 +490,6 @@ zip_file *zip_file_open(zip_dir *dir, const char *name, int d_off)
489 489
 		case ZIP_METHOD_REDUCEDx4:
490 490
 		case ZIP_METHOD_IMPLODED:
491 491
 		case ZIP_METHOD_TOKENIZED:
492
-		case ZIP_METHOD_DEFLATED64:
493 492
 		case ZIP_METHOD_IMPLODED_DCL:
494 493
 		case ZIP_METHOD_BZIP2:
495 494
 		case ZIP_METHOD_AES:
... ...
@@ -613,6 +613,7 @@ ssize_t zip_file_read(zip_file *fp, char *buf, size_t len)
613 613
 	    return bread;
614 614
 
615 615
 	case ZIP_METHOD_DEFLATED:
616
+	case ZIP_METHOD_DEFLATED64:
616 617
 	    fp->d_stream.avail_out = l;
617 618
 	    fp->d_stream.next_out = (unsigned char *) buf;
618 619
 	    do {
... ...
@@ -641,7 +642,12 @@ ssize_t zip_file_read(zip_file *fp, char *buf, size_t len)
641 641
 		    if(ret == Z_OK) {
642 642
 			fp->restlen -= (fp->d_stream.total_out - startlen);
643 643
 		    } else {
644
-			dir->errcode = CL_EZIP;
644
+			if(fp->method == ZIP_METHOD_DEFLATED64) {
645
+			    cli_dbgmsg("Unzip: zip_file_read: Not supported compression method (%u)\n", fp->method);
646
+			    dir->errcode = CL_ESUPPORT;
647
+			} else {
648
+			    dir->errcode = CL_EZIP;
649
+			}
645 650
 			return -1;
646 651
 		    }
647 652
 		}