Browse code

Better support for non-standard OLE2 archives

git-svn-id: file:///var/lib/svn/clamav-devel/trunk/clamav-devel@524 77e5149b-7576-45b1-b177-96237e5ba77b

Trog authored on 2004/04/26 19:51:00
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Mon Apr 26 11:51:28 BST 2004 (trog)
2
+-----------------------------------
3
+ libclamav/ole2_extract.c: Better support for non-standard OLE2 archives
4
+
1 5
 Sun Apr 25 13:58:35 BST 2004 (njh)
2 6
 ----------------------------------
3 7
  * clamav-milter:	Added --pidfile
... ...
@@ -480,7 +480,8 @@ static void ole2_walk_property_tree(int fd, ole2_header_t *hdr, const char *dir,
480 480
 	print_ole2_property(&prop_block[index]);
481 481
 	switch (prop_block[index].type) {
482 482
 		case 5: /* Root Entry */
483
-			if (prop_index != 0) {
483
+			if ((prop_index != 0) || (rec_level !=0) ||
484
+					(file_count != 0)) {
484 485
 				/* Can only have RootEntry as the top */
485 486
 				cli_dbgmsg("ERROR: illegal Root Entry\n");
486 487
 				return;
... ...
@@ -511,7 +512,10 @@ static void ole2_walk_property_tree(int fd, ole2_header_t *hdr, const char *dir,
511 511
 				return;
512 512
 			}
513 513
 			snprintf(dirname, strlen(dir)+8, "%s/%.6d", dir, prop_index);
514
-			mkdir(dirname, 0700);
514
+			if (mkdir(dirname, 0700) != 0) {
515
+				free(dirname);
516
+				return;
517
+			}
515 518
 			cli_dbgmsg("OLE2 dir entry: %s\n",dirname);
516 519
 			ole2_walk_property_tree(fd, hdr, dir,
517 520
 				prop_block[index].prev, handler, rec_level+1, file_count);