diff --git a/ext/standard/string.c b/ext/standard/string.c index 70743f4db7085..266f8c93c15dd 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1289,7 +1289,7 @@ PHP_FUNCTION(str_decrement) } } while (carry && position-- > 0); - if (UNEXPECTED(carry || ZSTR_VAL(decremented)[0] == '0')) { + if (UNEXPECTED(carry || (ZSTR_VAL(decremented)[0] == '0' && ZSTR_LEN(decremented) > 1))) { if (ZSTR_LEN(decremented) == 1) { zend_string_release_ex(decremented, /* persistent */ false); zend_argument_value_error(1, "\"%s\" is out of decrement range", ZSTR_VAL(str)); diff --git a/ext/standard/tests/strings/str_decrement_basic.phpt b/ext/standard/tests/strings/str_decrement_basic.phpt index ca02290c16661..9966336742102 100644 --- a/ext/standard/tests/strings/str_decrement_basic.phpt +++ b/ext/standard/tests/strings/str_decrement_basic.phpt @@ -28,6 +28,7 @@ $strictlyAlphaNumeric = [ "d", "D", "4", + "1", ]; foreach ($strictlyAlphaNumeric as $s) { @@ -77,3 +78,5 @@ string(1) "C" string(1) "D" string(1) "3" string(1) "4" +string(1) "0" +string(1) "1"