diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c index f99187b1c8e..52c7cc94d2e 100644 --- a/ext/standard/formatted_print.c +++ b/ext/standard/formatted_print.c @@ -470,10 +470,16 @@ php_formatted_print(char *format, size_t format_len, zval *args, int argc, int n /* space padding, the default */ } else if (*format == '+') { always_sign = 1; - } else if (*format == '\'' && format_len > 1) { - format++; - format_len--; - padding = *format; + } else if (*format == '\'') { + if (format_len > 1) { + format++; + format_len--; + padding = *format; + } else { + zend_value_error("Missing padding character"); + zend_string_efree(result); + return NULL; + } } else { PRINTF_DEBUG(("sprintf: end of modifiers\n")); break; diff --git a/ext/standard/tests/strings/bug67249.phpt b/ext/standard/tests/strings/bug67249.phpt index 6ea75289e64..a0e0843f4b1 100644 --- a/ext/standard/tests/strings/bug67249.phpt +++ b/ext/standard/tests/strings/bug67249.phpt @@ -2,7 +2,11 @@ Bug #67249 (printf out-of-bounds read) --FILE-- getMessage(), "\n"; +} ?> --EXPECT-- -string(0) "" +Missing padding character