@@ -386,7 +386,7 @@ PHP_FUNCTION(pcntl_exec)
386
386
args_hash = HASH_OF (args );
387
387
argc = zend_hash_num_elements (args_hash );
388
388
389
- argv = alloca ((argc + 2 ) * sizeof (char * ));
389
+ argv = safe_emalloc ((argc + 2 ), sizeof (char * ), 0 );
390
390
* argv = path ;
391
391
for ( zend_hash_internal_pointer_reset (args_hash ), current_arg = argv + 1 ;
392
392
(argi < argc && (zend_hash_get_current_data (args_hash , (void * * ) & element ) == SUCCESS ));
@@ -397,7 +397,7 @@ PHP_FUNCTION(pcntl_exec)
397
397
}
398
398
* (current_arg ) = NULL ;
399
399
} else {
400
- argv = alloca (2 * sizeof (char * ));
400
+ argv = emalloc (2 * sizeof (char * ));
401
401
* argv = path ;
402
402
* (argv + 1 ) = NULL ;
403
403
}
@@ -407,13 +407,13 @@ PHP_FUNCTION(pcntl_exec)
407
407
envs_hash = HASH_OF (envs );
408
408
envc = zend_hash_num_elements (envs_hash );
409
409
410
- envp = alloca ((envc + 1 ) * sizeof (char * ));
410
+ envp = safe_emalloc ((envc + 1 ), sizeof (char * ), 0 );
411
411
for ( zend_hash_internal_pointer_reset (envs_hash ), pair = envp ;
412
412
(envi < envc && (zend_hash_get_current_data (envs_hash , (void * * ) & element ) == SUCCESS ));
413
413
(envi ++ , pair ++ , zend_hash_move_forward (envs_hash )) ) {
414
414
switch (return_val = zend_hash_get_current_key_ex (envs_hash , & key , & key_length , & key_num , 0 , NULL )) {
415
415
case HASH_KEY_IS_LONG :
416
- key = alloca (101 );
416
+ key = emalloc (101 );
417
417
snprintf (key , 100 , "%ld" , key_num );
418
418
key_length = strlen (key );
419
419
break ;
@@ -432,7 +432,7 @@ PHP_FUNCTION(pcntl_exec)
432
432
strlcat (* pair , Z_STRVAL_PP (element ), pair_length );
433
433
434
434
/* Cleanup */
435
- if (return_val == HASH_KEY_IS_LONG ) free_alloca (key );
435
+ if (return_val == HASH_KEY_IS_LONG ) efree (key );
436
436
}
437
437
* (pair ) = NULL ;
438
438
}
@@ -445,10 +445,10 @@ PHP_FUNCTION(pcntl_exec)
445
445
/* Cleanup */
446
446
if (envp != NULL ) {
447
447
for (pair = envp ; * pair != NULL ; pair ++ ) efree (* pair );
448
- free_alloca (envp );
448
+ efree (envp );
449
449
}
450
450
451
- free_alloca (argv );
451
+ efree (argv );
452
452
453
453
RETURN_FALSE ;
454
454
}
0 commit comments