@@ -798,16 +798,19 @@ STATIC int noinline INIT inflate_dynamic(void)
798
798
unsigned nb ; /* number of bit length codes */
799
799
unsigned nl ; /* number of literal/length codes */
800
800
unsigned nd ; /* number of distance codes */
801
- #ifdef PKZIP_BUG_WORKAROUND
802
- unsigned ll [288 + 32 ]; /* literal/length and distance code lengths */
803
- #else
804
- unsigned ll [286 + 30 ]; /* literal/length and distance code lengths */
805
- #endif
801
+ unsigned * ll ; /* literal/length and distance code lengths */
806
802
register ulg b ; /* bit buffer */
807
803
register unsigned k ; /* number of bits in bit buffer */
804
+ int ret ;
808
805
809
806
DEBG ("<dyn" );
810
807
808
+ #ifdef PKZIP_BUG_WORKAROUND
809
+ ll = malloc (sizeof (* ll ) * (288 + 32 )); /* literal/length and distance code lengths */
810
+ #else
811
+ ll = malloc (sizeof (* ll ) * (286 + 30 )); /* literal/length and distance code lengths */
812
+ #endif
813
+
811
814
/* make local bit buffer */
812
815
b = bb ;
813
816
k = bk ;
@@ -828,7 +831,10 @@ DEBG("<dyn");
828
831
#else
829
832
if (nl > 286 || nd > 30 )
830
833
#endif
831
- return 1 ; /* bad lengths */
834
+ {
835
+ ret = 1 ; /* bad lengths */
836
+ goto out ;
837
+ }
832
838
833
839
DEBG ("dyn1 " );
834
840
@@ -850,7 +856,8 @@ DEBG("dyn2 ");
850
856
{
851
857
if (i == 1 )
852
858
huft_free (tl );
853
- return i ; /* incomplete code set */
859
+ ret = i ; /* incomplete code set */
860
+ goto out ;
854
861
}
855
862
856
863
DEBG ("dyn3 " );
@@ -872,8 +879,10 @@ DEBG("dyn3 ");
872
879
NEEDBITS (2 )
873
880
j = 3 + ((unsigned )b & 3 );
874
881
DUMPBITS (2 )
875
- if ((unsigned )i + j > n )
876
- return 1 ;
882
+ if ((unsigned )i + j > n ) {
883
+ ret = 1 ;
884
+ goto out ;
885
+ }
877
886
while (j -- )
878
887
ll [i ++ ] = l ;
879
888
}
@@ -882,8 +891,10 @@ DEBG("dyn3 ");
882
891
NEEDBITS (3 )
883
892
j = 3 + ((unsigned )b & 7 );
884
893
DUMPBITS (3 )
885
- if ((unsigned )i + j > n )
886
- return 1 ;
894
+ if ((unsigned )i + j > n ) {
895
+ ret = 1 ;
896
+ goto out ;
897
+ }
887
898
while (j -- )
888
899
ll [i ++ ] = 0 ;
889
900
l = 0 ;
@@ -893,8 +904,10 @@ DEBG("dyn3 ");
893
904
NEEDBITS (7 )
894
905
j = 11 + ((unsigned )b & 0x7f );
895
906
DUMPBITS (7 )
896
- if ((unsigned )i + j > n )
897
- return 1 ;
907
+ if ((unsigned )i + j > n ) {
908
+ ret = 1 ;
909
+ goto out ;
910
+ }
898
911
while (j -- )
899
912
ll [i ++ ] = 0 ;
900
913
l = 0 ;
@@ -923,7 +936,8 @@ DEBG("dyn5b ");
923
936
error ("incomplete literal tree" );
924
937
huft_free (tl );
925
938
}
926
- return i ; /* incomplete code set */
939
+ ret = i ; /* incomplete code set */
940
+ goto out ;
927
941
}
928
942
DEBG ("dyn5c " );
929
943
bd = dbits ;
@@ -939,15 +953,18 @@ DEBG("dyn5d ");
939
953
huft_free (td );
940
954
}
941
955
huft_free (tl );
942
- return i ; /* incomplete code set */
956
+ ret = i ; /* incomplete code set */
957
+ goto out ;
943
958
#endif
944
959
}
945
960
946
961
DEBG ("dyn6 " );
947
962
948
963
/* decompress until an end-of-block code */
949
- if (inflate_codes (tl , td , bl , bd ))
950
- return 1 ;
964
+ if (inflate_codes (tl , td , bl , bd )) {
965
+ ret = 1 ;
966
+ goto out ;
967
+ }
951
968
952
969
DEBG ("dyn7 " );
953
970
@@ -956,10 +973,14 @@ DEBG("dyn7 ");
956
973
huft_free (td );
957
974
958
975
DEBG (">" );
959
- return 0 ;
976
+ ret = 0 ;
977
+ out :
978
+ free (ll );
979
+ return ret ;
960
980
961
- underrun :
962
- return 4 ; /* Input underrun */
981
+ underrun :
982
+ ret = 4 ; /* Input underrun */
983
+ goto out ;
963
984
}
964
985
965
986
0 commit comments