Replace reallocarray with safe_perealloc (#9593)

This commit is contained in:
Ilija Tovilo 2022-09-22 14:55:41 +02:00 committed by GitHub
parent 49499c512e
commit b61c81c949
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 3 additions and 50 deletions

View file

@ -695,7 +695,7 @@ if test "$ac_cv_func_getaddrinfo" = yes; then
AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function]) AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
fi fi
AC_REPLACE_FUNCS(strlcat strlcpy explicit_bzero getopt reallocarray) AC_REPLACE_FUNCS(strlcat strlcpy explicit_bzero getopt)
AC_FUNC_ALLOCA AC_FUNC_ALLOCA
PHP_TIME_R_TYPE PHP_TIME_R_TYPE
PHP_CHECK_IN_ADDR_T PHP_CHECK_IN_ADDR_T
@ -1622,7 +1622,7 @@ PHP_ADD_SOURCES(main, main.c snprintf.c spprintf.c \
php_ini_builder.c \ php_ini_builder.c \
php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \ php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
strlcat.c explicit_bzero.c reentrancy.c php_variables.c php_ticks.c \ strlcat.c explicit_bzero.c reentrancy.c php_variables.c php_ticks.c \
network.c php_open_temporary_file.c php_odbc_utils.c safe_bcmp.c reallocarray.c \ network.c php_open_temporary_file.c php_odbc_utils.c safe_bcmp.c \
output.c getopt.c php_syslog.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1) output.c getopt.c php_syslog.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
PHP_ADD_SOURCES_X(main, fastcgi.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, PHP_FASTCGI_OBJS, no) PHP_ADD_SOURCES_X(main, fastcgi.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, PHP_FASTCGI_OBJS, no)

View file

@ -179,14 +179,6 @@ END_EXTERN_C()
#define explicit_bzero php_explicit_bzero #define explicit_bzero php_explicit_bzero
#endif #endif
#ifndef HAVE_REALLOCARRAY
BEGIN_EXTERN_C()
PHPAPI void* php_reallocarray(void *p, size_t nmb, size_t siz);
END_EXTERN_C()
#undef reallocarray
#define reallocarray php_reallocarray
#endif
BEGIN_EXTERN_C() BEGIN_EXTERN_C()
PHPAPI int php_safe_bcmp(const zend_string *a, const zend_string *b); PHPAPI int php_safe_bcmp(const zend_string *a, const zend_string *b);
END_EXTERN_C() END_EXTERN_C()

View file

@ -1,39 +0,0 @@
/*
+----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| https://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: David Carlier <devnexen@gmail.com> |
+----------------------------------------------------------------------+
*/
#include "php.h"
#ifndef HAVE_REALLOCARRAY
#include <string.h>
PHPAPI void* php_reallocarray(void *p, size_t nmb, size_t siz)
{
size_t r;
#ifndef _WIN32
if (__builtin_mul_overflow(nmb, siz, &r)) {
#else
if (SizeTMult(nmb, siz, &r) != S_OK) {
#endif
// EOVERFLOW may have been, arguably, more appropriate
// but this is what other implementations set
errno = ENOMEM;
return NULL;
}
return realloc(p, r);
}
#endif

View file

@ -86,7 +86,7 @@ static inline void *fpm_array_push(struct fpm_array_s *a) /* {{{ */
if (a->used == a->allocated) { if (a->used == a->allocated) {
size_t new_allocated = a->allocated ? a->allocated * 2 : 20; size_t new_allocated = a->allocated ? a->allocated * 2 : 20;
void *new_ptr = reallocarray(a->data, a->sz, new_allocated); void *new_ptr = safe_perealloc(a->data, a->sz, new_allocated, 0, true);
if (!new_ptr) { if (!new_ptr) {
return 0; return 0;