@@ -2486,7 +2486,10 @@ ZEND_API char* ZEND_FASTCALL _estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_
2486
2486
char * p ;
2487
2487
2488
2488
length = strlen (s );
2489
- p = (char * ) _emalloc (safe_address (length , 1 , 1 ) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2489
+ if (UNEXPECTED (length + 1 == 0 )) {
2490
+ zend_error_noreturn (E_ERROR , "Possible integer overflow in memory allocation (%zu * %zu + %zu)" , 1 , length , 1 );
2491
+ }
2492
+ p = (char * ) _emalloc (length + 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2490
2493
if (UNEXPECTED (p == NULL )) {
2491
2494
return p ;
2492
2495
}
@@ -2498,7 +2501,10 @@ ZEND_API char* ZEND_FASTCALL _estrndup(const char *s, size_t length ZEND_FILE_LI
2498
2501
{
2499
2502
char * p ;
2500
2503
2501
- p = (char * ) _emalloc (safe_address (length , 1 , 1 ) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2504
+ if (UNEXPECTED (length + 1 == 0 )) {
2505
+ zend_error_noreturn (E_ERROR , "Possible integer overflow in memory allocation (%zu * %zu + %zu)" , 1 , length , 1 );
2506
+ }
2507
+ p = (char * ) _emalloc (length + 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2502
2508
if (UNEXPECTED (p == NULL )) {
2503
2509
return p ;
2504
2510
}
@@ -2512,7 +2518,10 @@ ZEND_API char* ZEND_FASTCALL zend_strndup(const char *s, size_t length)
2512
2518
{
2513
2519
char * p ;
2514
2520
2515
- p = (char * ) malloc (safe_address (length , 1 , 1 ));
2521
+ if (UNEXPECTED (length + 1 == 0 )) {
2522
+ zend_error_noreturn (E_ERROR , "Possible integer overflow in memory allocation (%zu * %zu + %zu)" , 1 , length , 1 );
2523
+ }
2524
+ p = (char * ) malloc (length + 1 );
2516
2525
if (UNEXPECTED (p == NULL )) {
2517
2526
return p ;
2518
2527
}
0 commit comments