... | ... |
@@ -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) |