Browse code

fixed issue that caused pre-mature exiting of ole2 tree walking

Kevin Lin authored on 2013/11/27 06:00:57
Showing 1 changed files
... ...
@@ -597,7 +597,7 @@ ole2_walk_property_tree(ole2_header_t * hdr, const char *dir, int32_t prop_index
597 597
         switch (prop_block[idx].type) {
598 598
         case 5:                /* Root Entry */
599 599
             ole2_listmsg("root node\n");
600
-            if ((prop_index != 0) || (rec_level != 0) ||
600
+            if ((curindex != 0) || (rec_level != 0) ||
601 601
                     (*file_count != 0)) {
602 602
                 /* Can only have RootEntry as the top */
603 603
                 cli_dbgmsg("ERROR: illegal Root Entry\n");
... ...
@@ -635,7 +635,8 @@ ole2_walk_property_tree(ole2_header_t * hdr, const char *dir, int32_t prop_index
635 635
                 *scansize -= prop_block[idx].size;
636 636
                 ole2_listmsg("running file handler\n");
637 637
                 if ((ret = handler(hdr, &prop_block[idx], dir, ctx)) != CL_SUCCESS) {
638
-                    ole2_list_delete(&node_list);
638
+                    ole2_listmsg("file handler returned %d\n", ret);
639
+		    ole2_list_delete(&node_list);
639 640
                     return ret;
640 641
                 }
641 642
             } else {
... ...
@@ -664,11 +665,13 @@ ole2_walk_property_tree(ole2_header_t * hdr, const char *dir, int32_t prop_index
664 664
             if (dir) {
665 665
                 dirname = (char *)cli_malloc(strlen(dir) + 8);
666 666
                 if (!dirname) {
667
+		    ole2_listmsg("OLE2: malloc failed for dirname\n");
667 668
                     ole2_list_delete(&node_list);
668
-                    return CL_BREAK;
669
+                    return CL_EMEM;
669 670
                 }
670
-                snprintf(dirname, strlen(dir) + 8, "%s" PATHSEP "%.6d", dir, prop_index);
671
+                snprintf(dirname, strlen(dir) + 8, "%s" PATHSEP "%.6d", dir, curindex);
671 672
                 if (mkdir(dirname, 0700) != 0) {
673
+		    ole2_listmsg("OLE2: mkdir failed for directory %s\n", dirname);
672 674
                     free(dirname);
673 675
                     ole2_list_delete(&node_list);
674 676
                     return CL_BREAK;