Skip to content

Commit 87f0f77

Browse files
committed
Simplified integer overflow checks
1 parent 5d15d2b commit 87f0f77

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

Zend/zend_alloc.c

+12-3
Original file line numberDiff line numberDiff line change
@@ -2486,7 +2486,10 @@ ZEND_API char* ZEND_FASTCALL _estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_
24862486
char *p;
24872487

24882488
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);
24902493
if (UNEXPECTED(p == NULL)) {
24912494
return p;
24922495
}
@@ -2498,7 +2501,10 @@ ZEND_API char* ZEND_FASTCALL _estrndup(const char *s, size_t length ZEND_FILE_LI
24982501
{
24992502
char *p;
25002503

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);
25022508
if (UNEXPECTED(p == NULL)) {
25032509
return p;
25042510
}
@@ -2512,7 +2518,10 @@ ZEND_API char* ZEND_FASTCALL zend_strndup(const char *s, size_t length)
25122518
{
25132519
char *p;
25142520

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);
25162525
if (UNEXPECTED(p == NULL)) {
25172526
return p;
25182527
}

0 commit comments

Comments
 (0)