Browse code

Plug a few potential memory leaks

Shawn Webb authored on 2014/06/26 23:27:21
Showing 1 changed files
... ...
@@ -631,12 +631,24 @@ struct pdf_dict *pdf_parse_dict(struct pdf_struct *pdf, struct pdf_obj *obj, siz
631 631
             res->nodes = res->tail = node = cli_calloc(1, sizeof(struct pdf_dict_node));
632 632
             if (!(node)) {
633 633
                 free(key);
634
+                if (dict)
635
+                    pdf_free_dict(dict);
636
+                if (val)
637
+                    free(val);
638
+                if (arr)
639
+                    pdf_free_array(arr);
634 640
                 break;
635 641
             }
636 642
         } else {
637 643
             node = calloc(1, sizeof(struct pdf_dict_node));
638 644
             if (!(node)) {
639 645
                 free(key);
646
+                if (dict)
647
+                    pdf_free_dict(dict);
648
+                if (val)
649
+                    free(val);
650
+                if (arr)
651
+                    pdf_free_array(arr);
640 652
                 break;
641 653
             }
642 654
 
... ...
@@ -672,7 +684,7 @@ struct pdf_array *pdf_parse_array(struct pdf_struct *pdf, struct pdf_obj *obj, s
672 672
 {
673 673
     struct pdf_array *res=NULL;
674 674
     struct pdf_array_node *node=NULL;
675
-    const char *objstart = obj->start + pdf->map;
675
+    const char *objstart;
676 676
     char *end, *tempend;
677 677
     int in_string=0, ninner=0;
678 678
 
... ...
@@ -680,6 +692,8 @@ struct pdf_array *pdf_parse_array(struct pdf_struct *pdf, struct pdf_obj *obj, s
680 680
     if (!(pdf) || !(obj) || !(begin))
681 681
         return NULL;
682 682
 
683
+    objstart = obj->start + pdf->map;
684
+
683 685
     if (begin < objstart || begin - objstart >= objsz)
684 686
         return NULL;
685 687
 
... ...
@@ -783,12 +797,28 @@ struct pdf_array *pdf_parse_array(struct pdf_struct *pdf, struct pdf_obj *obj, s
783 783
 
784 784
         if (!(node)) {
785 785
             res->nodes = res->tail = node = calloc(1, sizeof(struct pdf_array_node));
786
-            if (!(node))
786
+            if (!(node)) {
787
+                if (dict)
788
+                    pdf_free_dict(dict);
789
+                if (val)
790
+                    free(val);
791
+                if (arr)
792
+                    pdf_free_array(arr);
793
+
787 794
                 break;
795
+            }
788 796
         } else {
789 797
             node = calloc(1, sizeof(struct pdf_array_node));
790
-            if (!(node))
798
+            if (!(node)) {
799
+                if (dict)
800
+                    pdf_free_dict(dict);
801
+                if (val)
802
+                    free(val);
803
+                if (arr)
804
+                    pdf_free_array(arr);
805
+
791 806
                 break;
807
+            }
792 808
 
793 809
             node->prev = res->tail;
794 810
             if (res->tail)