diff --git a/Zend/tests/fibers/negative_stack_size.phpt b/Zend/tests/fibers/negative_stack_size.phpt new file mode 100644 index 00000000000..591a8f28878 --- /dev/null +++ b/Zend/tests/fibers/negative_stack_size.phpt @@ -0,0 +1,16 @@ +--TEST-- +fiber.stack_size must be a positive number +--FILE-- +start(); +} catch (Throwable $e) { + echo "Exception: " . $e->getMessage()."\n"; +} +?> +DONE +--EXPECTF-- +Warning: fiber.stack_size must be a positive number in %snegative_stack_size.php on line 2 +DONE diff --git a/Zend/zend.c b/Zend/zend.c index 46da1ebd21e..fb0af12f9e5 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -230,7 +230,12 @@ static ZEND_INI_MH(OnUpdateReservedStackSize) /* {{{ */ static ZEND_INI_MH(OnUpdateFiberStackSize) /* {{{ */ { if (new_value) { - EG(fiber_stack_size) = zend_ini_parse_uquantity_warn(new_value, entry->name); + zend_long tmp = zend_ini_parse_quantity_warn(new_value, entry->name); + if (tmp < 0) { + zend_error(E_WARNING, "fiber.stack_size must be a positive number"); + return FAILURE; + } + EG(fiber_stack_size) = tmp; } else { EG(fiber_stack_size) = ZEND_FIBER_DEFAULT_C_STACK_SIZE; }