@@ -984,7 +984,7 @@ static void zend_mm_random(unsigned char *buf, size_t size) /* {{{ */
984
984
int has_context = 0 ;
985
985
986
986
if (!CryptAcquireContext (& hCryptProv , NULL , NULL , PROV_RSA_FULL , 0 )) {
987
- /* Could mean that the key container does not exist, let try
987
+ /* Could mean that the key container does not exist, let try
988
988
again by asking for a new one */
989
989
if (GetLastError () == NTE_BAD_KEYSET ) {
990
990
if (CryptAcquireContext (& hCryptProv , NULL , NULL , PROV_RSA_FULL , CRYPT_NEWKEYSET )) {
@@ -1348,7 +1348,7 @@ static int zend_mm_check_ptr(zend_mm_heap *heap, void *ptr, int silent ZEND_FILE
1348
1348
}
1349
1349
if (!silent ) {
1350
1350
TSRMLS_FETCH ();
1351
-
1351
+
1352
1352
zend_message_dispatcher (ZMSG_LOG_SCRIPT_NAME , NULL TSRMLS_CC );
1353
1353
zend_debug_alloc_output ("---------------------------------------\n" );
1354
1354
zend_debug_alloc_output ("%s(%d) : Block " PTR_FMT " status:\n" ZEND_FILE_LINE_RELAY_CC , ptr );
@@ -2175,7 +2175,7 @@ static void *_zend_mm_realloc_int(zend_mm_heap *heap, void *p, size_t size ZEND_
2175
2175
#if ZEND_MM_CACHE
2176
2176
if (ZEND_MM_SMALL_SIZE (true_size )) {
2177
2177
size_t index = ZEND_MM_BUCKET_INDEX (true_size );
2178
-
2178
+
2179
2179
if (heap -> cache [index ] != NULL ) {
2180
2180
zend_mm_free_block * best_fit ;
2181
2181
zend_mm_free_block * * cache ;
@@ -2188,7 +2188,7 @@ static void *_zend_mm_realloc_int(zend_mm_heap *heap, void *p, size_t size ZEND_
2188
2188
heap -> cache [index ] = best_fit -> prev_free_block ;
2189
2189
ZEND_MM_CHECK_MAGIC (best_fit , MEM_BLOCK_CACHED );
2190
2190
ZEND_MM_SET_DEBUG_INFO (best_fit , size , 1 , 0 );
2191
-
2191
+
2192
2192
ptr = ZEND_MM_DATA_OF (best_fit );
2193
2193
2194
2194
#if ZEND_DEBUG || ZEND_MM_HEAP_PROTECTION
@@ -2470,7 +2470,7 @@ static inline size_t safe_address(size_t nmemb, size_t size, size_t offset)
2470
2470
: "%0" (res ),
2471
2471
"rm" (size ),
2472
2472
"rm" (offset ));
2473
-
2473
+
2474
2474
if (UNEXPECTED (overflow )) {
2475
2475
zend_error_noreturn (E_ERROR , "Possible integer overflow in memory allocation (%zu * %zu + %zu)" , nmemb , size , offset );
2476
2476
return 0 ;
@@ -2619,21 +2619,21 @@ ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LI
2619
2619
2620
2620
ZEND_API char * _estrdup (const char * s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC )
2621
2621
{
2622
- int length ;
2622
+ size_t length ;
2623
2623
char * p ;
2624
2624
#ifdef ZEND_SIGNALS
2625
2625
TSRMLS_FETCH ();
2626
2626
#endif
2627
2627
2628
2628
HANDLE_BLOCK_INTERRUPTIONS ();
2629
2629
2630
- length = strlen (s )+ 1 ;
2631
- p = (char * ) _emalloc (length ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2630
+ length = strlen (s );
2631
+ p = (char * ) _emalloc (safe_address ( length , 1 , 1 ) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2632
2632
if (UNEXPECTED (p == NULL )) {
2633
2633
HANDLE_UNBLOCK_INTERRUPTIONS ();
2634
2634
return p ;
2635
2635
}
2636
- memcpy (p , s , length );
2636
+ memcpy (p , s , length + 1 );
2637
2637
HANDLE_UNBLOCK_INTERRUPTIONS ();
2638
2638
return p ;
2639
2639
}
@@ -2647,7 +2647,7 @@ ZEND_API char *_estrndup(const char *s, uint length ZEND_FILE_LINE_DC ZEND_FILE_
2647
2647
2648
2648
HANDLE_BLOCK_INTERRUPTIONS ();
2649
2649
2650
- p = (char * ) _emalloc (length + 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2650
+ p = (char * ) _emalloc (safe_address ( length , 1 , 1 ) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2651
2651
if (UNEXPECTED (p == NULL )) {
2652
2652
HANDLE_UNBLOCK_INTERRUPTIONS ();
2653
2653
return p ;
@@ -2668,7 +2668,7 @@ ZEND_API char *zend_strndup(const char *s, uint length)
2668
2668
2669
2669
HANDLE_BLOCK_INTERRUPTIONS ();
2670
2670
2671
- p = (char * ) malloc (length + 1 );
2671
+ p = (char * ) malloc (safe_address ( length , 1 , 1 ) );
2672
2672
if (UNEXPECTED (p == NULL )) {
2673
2673
HANDLE_UNBLOCK_INTERRUPTIONS ();
2674
2674
return p ;
0 commit comments