@@ -164,47 +164,6 @@ struct glob_path_stat {
164
164
zend_stat_t * gps_stat ;
165
165
};
166
166
167
- /*
168
- * XXX: This is temporary to avoid having reallocarray be imported and part of
169
- * PHP's public API. Since it's only needed here and on Windows, we can just
170
- * put it here for now. Convert this file to ZendMM and remove this function
171
- * when that's complete.
172
- */
173
-
174
- /* $OpenBSD: reallocarray.c,v 1.3 2015/09/13 08:31:47 guenther Exp $ */
175
- /*
176
- * Copyright (c) 2008 Otto Moerbeek <[email protected] >
177
- *
178
- * Permission to use, copy, modify, and distribute this software for any
179
- * purpose with or without fee is hereby granted, provided that the above
180
- * copyright notice and this permission notice appear in all copies.
181
- *
182
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
183
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
184
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
185
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
186
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
187
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
188
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
189
- */
190
-
191
- /*
192
- * This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX
193
- * if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW
194
- */
195
- #define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4))
196
-
197
- static void *
198
- reallocarray (void * optr , size_t nmemb , size_t size )
199
- {
200
- if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW ) &&
201
- nmemb > 0 && SIZE_MAX / nmemb < size ) {
202
- errno = ENOMEM ;
203
- return NULL ;
204
- }
205
- return realloc (optr , size * nmemb );
206
- }
207
-
208
167
static int compare (const void * , const void * );
209
168
static int compare_gps (const void * , const void * );
210
169
static int g_Ctoc (const Char * , char * , size_t );
@@ -638,7 +597,7 @@ static int glob0(const Char *pattern, glob_t *pglob, struct glob_lim *limitp)
638
597
size_t n = pglob -> gl_pathc - oldpathc ;
639
598
size_t o = pglob -> gl_offs + oldpathc ;
640
599
641
- if ((path_stat = calloc (n , sizeof (* path_stat ))) == NULL )
600
+ if ((path_stat = ecalloc (n , sizeof (* path_stat ))) == NULL )
642
601
return GLOB_NOSPACE ;
643
602
for (i = 0 ; i < n ; i ++ ) {
644
603
path_stat [i ].gps_path = pglob -> gl_pathv [o + i ];
@@ -649,7 +608,7 @@ static int glob0(const Char *pattern, glob_t *pglob, struct glob_lim *limitp)
649
608
pglob -> gl_pathv [o + i ] = path_stat [i ].gps_path ;
650
609
pglob -> gl_statv [o + i ] = path_stat [i ].gps_stat ;
651
610
}
652
- free (path_stat );
611
+ efree (path_stat );
653
612
} else {
654
613
qsort (pglob -> gl_pathv + pglob -> gl_offs + oldpathc ,
655
614
pglob -> gl_pathc - oldpathc , sizeof (char * ),
@@ -869,19 +828,19 @@ static int globextend(const Char *path, glob_t *pglob, struct glob_lim *limitp,
869
828
nospace :
870
829
for (i = pglob -> gl_offs ; i < newn - 2 ; i ++ ) {
871
830
if (pglob -> gl_pathv && pglob -> gl_pathv [i ])
872
- free (pglob -> gl_pathv [i ]);
831
+ efree (pglob -> gl_pathv [i ]);
873
832
if ((pglob -> gl_flags & GLOB_KEEPSTAT ) != 0 &&
874
833
pglob -> gl_pathv && pglob -> gl_pathv [i ])
875
- free (pglob -> gl_statv [i ]);
834
+ efree (pglob -> gl_statv [i ]);
876
835
}
877
- free (pglob -> gl_pathv );
836
+ efree (pglob -> gl_pathv );
878
837
pglob -> gl_pathv = NULL ;
879
- free (pglob -> gl_statv );
838
+ efree (pglob -> gl_statv );
880
839
pglob -> gl_statv = NULL ;
881
840
return (GLOB_NOSPACE );
882
841
}
883
842
884
- pathv = reallocarray (pglob -> gl_pathv , newn , sizeof (* pathv ));
843
+ pathv = safe_erealloc_rel (pglob -> gl_pathv , newn , sizeof (* pathv ), 0 );
885
844
if (pathv == NULL )
886
845
goto nospace ;
887
846
if (pglob -> gl_pathv == NULL && pglob -> gl_offs > 0 ) {
@@ -893,7 +852,7 @@ static int globextend(const Char *path, glob_t *pglob, struct glob_lim *limitp,
893
852
pglob -> gl_pathv = pathv ;
894
853
895
854
if ((pglob -> gl_flags & GLOB_KEEPSTAT ) != 0 ) {
896
- statv = reallocarray (pglob -> gl_statv , newn , sizeof (* statv ));
855
+ statv = safe_erealloc_rel (pglob -> gl_statv , newn , sizeof (* statv ), 0 );
897
856
if (statv == NULL )
898
857
goto nospace ;
899
858
if (pglob -> gl_statv == NULL && pglob -> gl_offs > 0 ) {
@@ -913,7 +872,7 @@ static int globextend(const Char *path, glob_t *pglob, struct glob_lim *limitp,
913
872
return (GLOB_NOSPACE );
914
873
}
915
874
if ((statv [pglob -> gl_offs + pglob -> gl_pathc ] =
916
- malloc (sizeof (* * statv ))) == NULL )
875
+ emalloc (sizeof (* * statv ))) == NULL )
917
876
goto copy_error ;
918
877
memcpy (statv [pglob -> gl_offs + pglob -> gl_pathc ], sb ,
919
878
sizeof (* sb ));
@@ -925,9 +884,9 @@ static int globextend(const Char *path, glob_t *pglob, struct glob_lim *limitp,
925
884
;
926
885
len = (size_t )(p - path );
927
886
limitp -> glim_malloc += len ;
928
- if ((copy = malloc (len )) != NULL ) {
887
+ if ((copy = emalloc (len )) != NULL ) {
929
888
if (g_Ctoc (path , copy , len )) {
930
- free (copy );
889
+ efree (copy );
931
890
return (GLOB_NOSPACE );
932
891
}
933
892
pathv [pglob -> gl_offs + pglob -> gl_pathc ++ ] = copy ;
@@ -1032,15 +991,15 @@ PHPAPI void globfree(glob_t *pglob)
1032
991
if (pglob -> gl_pathv != NULL ) {
1033
992
pp = pglob -> gl_pathv + pglob -> gl_offs ;
1034
993
for (i = pglob -> gl_pathc ; i -- ; ++ pp )
1035
- free (* pp );
1036
- free (pglob -> gl_pathv );
994
+ efree (* pp );
995
+ efree (pglob -> gl_pathv );
1037
996
pglob -> gl_pathv = NULL ;
1038
997
}
1039
998
if (pglob -> gl_statv != NULL ) {
1040
999
for (i = 0 ; i < pglob -> gl_pathc ; i ++ ) {
1041
- free (pglob -> gl_statv [i ]);
1000
+ efree (pglob -> gl_statv [i ]);
1042
1001
}
1043
- free (pglob -> gl_statv );
1002
+ efree (pglob -> gl_statv );
1044
1003
pglob -> gl_statv = NULL ;
1045
1004
}
1046
1005
}
0 commit comments