From fe3a819e325e3f468d482c8ad1249de14610e093 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 1 Nov 2023 16:13:17 +0300 Subject: [PATCH] Fixed GH-12564: The negative fiber.stack_size setting leads to crash --- Zend/tests/fibers/negative_stack_size.phpt | 16 ++++++++++++++++ Zend/zend.c | 7 ++++++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 Zend/tests/fibers/negative_stack_size.phpt 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 351e9ac5eea..e6f92410c08 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -177,7 +177,12 @@ static ZEND_INI_MH(OnSetExceptionStringParamMaxLen) /* {{{ */ static ZEND_INI_MH(OnUpdateFiberStackSize) /* {{{ */ { if (new_value) { - EG(fiber_stack_size) = zend_atol(ZSTR_VAL(new_value), ZSTR_LEN(new_value)); + zend_long tmp = zend_atol(ZSTR_VAL(new_value), ZSTR_LEN(new_value)); + 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; }