Commit d15160d51a9 for php
commit d15160d51a9cd1fd2006f3c51efb4f2764ddf878
Author: Arnaud Le Blanc <365207+arnaud-lb@users.noreply.github.com>
Date: Wed Nov 4 18:38:51 2026 +0100
Turn internal-only E_ERRORs to E_CORE_ERRORs (#25188)
These can only be caused by a bug in internal code or by a misconfiguration. Some of them could have been assertions. Turn all of them to E_CORE_ERROR: exit() instead of zend_bailout().
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index 4221e4fe359..2b52babc98e 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -876,7 +876,7 @@ static zend_always_inline void zend_mm_hugepage(void* ptr, size_t size)
struct memcntl_mha m = {.mha_cmd = MHA_MAPSIZE_VA, .mha_pagesize = ZEND_MM_CHUNK_SIZE, .mha_flags = 0};
(void)memcntl(ptr, size, MC_HAT_ADVISE, (char *)&m, 0, 0);
#elif !defined(VM_FLAGS_SUPERPAGE_SIZE_2MB) && !defined(MAP_ALIGNED_SUPER)
- zend_error_noreturn(E_ERROR, "huge_pages: thp unsupported on this platform");
+ zend_error_noreturn(E_CORE_ERROR, "huge_pages: thp unsupported on this platform");
#endif
}
diff --git a/Zend/zend_attributes.c b/Zend/zend_attributes.c
index d57b4c91446..c6615f13df9 100644
--- a/Zend/zend_attributes.c
+++ b/Zend/zend_attributes.c
@@ -537,7 +537,7 @@ ZEND_API zend_internal_attribute *zend_mark_internal_attribute(zend_class_entry
zend_attribute *attr;
if (ce->type != ZEND_INTERNAL_CLASS) {
- zend_error_noreturn(E_ERROR, "Only internal classes can be registered as compiler attribute");
+ zend_error_noreturn(E_CORE_ERROR, "Only internal classes can be registered as compiler attribute");
}
ZEND_HASH_FOREACH_PTR(ce->attributes, attr) {
@@ -555,7 +555,7 @@ ZEND_API zend_internal_attribute *zend_mark_internal_attribute(zend_class_entry
}
} ZEND_HASH_FOREACH_END();
- zend_error_noreturn(E_ERROR, "Classes must be first marked as attribute before being able to be registered as internal attribute class");
+ zend_error_noreturn(E_CORE_ERROR, "Classes must be first marked as attribute before being able to be registered as internal attribute class");
}
ZEND_API zend_internal_attribute *zend_internal_attribute_register(zend_class_entry *ce, uint32_t flags)
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 62cff0c4466..7fb0299ae27 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -10181,7 +10181,7 @@ static void zend_compile_class_decl(znode *result, const zend_ast *ast, bool top
zend_make_var_result(result, opline);
if (!zend_hash_add_ptr(CG(class_table), lcname, ce)) {
/* We checked above that the class name is not used. This really shouldn't happen. */
- zend_error_noreturn(E_ERROR,
+ zend_error_noreturn(E_CORE_ERROR,
"Runtime definition key collision for %pS. This is a bug", name);
}
} else {
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index ac0e07fba5b..a513593d7d6 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1357,7 +1357,7 @@ ZEND_API bool zend_internal_call_should_throw(const zend_function *fbc, zend_exe
ZEND_API zend_never_inline ZEND_COLD void zend_internal_call_arginfo_violation(const zend_function *fbc)
{
- zend_error_noreturn(E_ERROR, "Arginfo / zpp mismatch during call of %s%s%s()",
+ zend_error_noreturn(E_CORE_ERROR, "Arginfo / zpp mismatch during call of %s%s%s()",
fbc->common.scope ? ZSTR_VAL(fbc->common.scope->name) : "",
fbc->common.scope ? "::" : "",
ZSTR_VAL(fbc->common.function_name));
diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c
index f57e69de740..4ea0555957e 100644
--- a/Zend/zend_gc.c
+++ b/Zend/zend_gc.c
@@ -1862,12 +1862,12 @@ static zend_internal_function gc_destructor_fiber;
ZEND_NORETURN static ZEND_COLD void gc_create_destructor_fiber_error(void)
{
- zend_error_noreturn(E_ERROR, "Unable to create destructor fiber");
+ zend_error_noreturn(E_CORE_ERROR, "Unable to create destructor fiber");
}
ZEND_NORETURN static ZEND_COLD void gc_start_destructor_fiber_error(void)
{
- zend_error_noreturn(E_ERROR, "Unable to start destructor fiber");
+ zend_error_noreturn(E_CORE_ERROR, "Unable to start destructor fiber");
}
/* Call destructors for garbage in the buffer. */
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index f6deb7be7e6..48f7f977251 100644
Binary files a/Zend/zend_vm_execute.h and b/Zend/zend_vm_execute.h differ
diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php
index 4f4dacb8523..04f958a469a 100755
--- a/Zend/zend_vm_gen.php
+++ b/Zend/zend_vm_gen.php
@@ -1580,7 +1580,7 @@ function gen_null_handler($f, $kind) {
out($f,"\tUSE_OPLINE\n");
out($f,"\n");
out($f,"\tSAVE_OPLINE();\n");
- out($f,"\tzend_error_noreturn(E_ERROR, \"Invalid opcode %d/%d/%d.\", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);\n");
+ out($f,"\tzend_error_noreturn(E_CORE_ERROR, \"Invalid opcode %d/%d/%d.\", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);\n");
out($f,"}\n\n");
}
@@ -1825,11 +1825,11 @@ function gen_executor_code($f, $spec, $kind, $prolog, &$switch_labels = array())
break;
case ZEND_VM_KIND_SWITCH:
out($f,"default: ZEND_NULL_LABEL:\n");
- out($f,"\tzend_error_noreturn(E_ERROR, \"Invalid opcode %d/%d/%d.\", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);\n");
+ out($f,"\tzend_error_noreturn(E_CORE_ERROR, \"Invalid opcode %d/%d/%d.\", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);\n");
break;
case ZEND_VM_KIND_GOTO:
out($f,"ZEND_NULL_LABEL:\n");
- out($f,"\tzend_error_noreturn(E_ERROR, \"Invalid opcode %d/%d/%d.\", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);\n");
+ out($f,"\tzend_error_noreturn(E_CORE_ERROR, \"Invalid opcode %d/%d/%d.\", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);\n");
break;
case ZEND_VM_KIND_HYBRID:
out($f,"\t\t\tHYBRID_CASE(HYBRID_HALT):\n");
diff --git a/ext/pdo/pdo.c b/ext/pdo/pdo.c
index 5b881b0f56d..aa239326d40 100644
--- a/ext/pdo/pdo.c
+++ b/ext/pdo/pdo.c
@@ -111,11 +111,11 @@ ZEND_GET_MODULE(pdo)
PDO_API zend_result php_pdo_register_driver(const pdo_driver_t *driver) /* {{{ */
{
if (driver->api_version != PDO_DRIVER_API) {
- zend_error_noreturn(E_ERROR, "PDO: driver %s requires PDO API version " ZEND_ULONG_FMT "; this is PDO version %d",
+ zend_error_noreturn(E_CORE_ERROR, "PDO: driver %s requires PDO API version " ZEND_ULONG_FMT "; this is PDO version %d",
driver->driver_name, driver->api_version, PDO_DRIVER_API);
}
if (!zend_hash_str_exists(&module_registry, "pdo", sizeof("pdo") - 1)) {
- zend_error_noreturn(E_ERROR, "The PDO extension must be loaded first in order to load PDO drivers");
+ zend_error_noreturn(E_CORE_ERROR, "The PDO extension must be loaded first in order to load PDO drivers");
}
return zend_hash_str_add_ptr(&pdo_driver_hash, driver->driver_name, driver->driver_name_len, (void*)driver) != NULL ? SUCCESS : FAILURE;
@@ -136,7 +136,7 @@ PDO_API void php_pdo_unregister_driver(const pdo_driver_t *driver) /* {{{ */
PDO_API zend_result php_pdo_register_driver_specific_ce(const pdo_driver_t *driver, zend_class_entry *ce) /* {{{ */
{
if (!zend_hash_str_exists(&module_registry, "pdo", sizeof("pdo") - 1)) {
- zend_error_noreturn(E_ERROR, "The PDO extension must be loaded first in order to load PDO drivers");
+ zend_error_noreturn(E_CORE_ERROR, "The PDO extension must be loaded first in order to load PDO drivers");
}
return zend_hash_str_add_ptr(&pdo_driver_specific_ce_hash, driver->driver_name,
diff --git a/ext/sodium/libsodium.c b/ext/sodium/libsodium.c
index c44d49e283a..07c88d4497b 100644
--- a/ext/sodium/libsodium.c
+++ b/ext/sodium/libsodium.c
@@ -304,7 +304,7 @@ static void sodium_separate_string(zval *zv) {
PHP_MINIT_FUNCTION(sodium)
{
if (sodium_init() < 0) {
- zend_error_noreturn(E_ERROR, "sodium_init()");
+ zend_error_noreturn(E_CORE_ERROR, "sodium_init()");
}
sodium_exception_ce = register_class_SodiumException(zend_ce_exception);
@@ -4736,7 +4736,7 @@ PHP_FUNCTION(sodium_crypto_xof_turboshake128_squeeze)
zend_argument_error(sodium_exception_ce, 2, "must be greater than 0");
RETURN_THROWS();
}
-
+
php_sodium_crypto_xof_turboshake128_state *state = php_sodium_crypto_xof_turboshake128_state_from_obj(Z_OBJ_P(state_zv));
zend_string *out = zend_string_alloc((size_t) out_len, 0);
diff --git a/main/output.c b/main/output.c
index b717d3d84ad..f7e1244a3d9 100644
--- a/main/output.c
+++ b/main/output.c
@@ -606,7 +606,7 @@ PHPAPI zend_result php_output_handler_conflict_register(const char *name, size_t
zend_string *str;
if (!EG(current_module)) {
- zend_error_noreturn(E_ERROR, "Cannot register an output handler conflict outside of MINIT");
+ zend_error_noreturn(E_CORE_ERROR, "Cannot register an output handler conflict outside of MINIT");
}
str = zend_string_init_interned(name, name_len, 1);
zend_hash_update_ptr(&php_output_handler_conflicts, str, check_func);
@@ -622,7 +622,7 @@ PHPAPI zend_result php_output_handler_reverse_conflict_register(const char *name
HashTable rev, *rev_ptr = NULL;
if (!EG(current_module)) {
- zend_error_noreturn(E_ERROR, "Cannot register a reverse output handler conflict outside of MINIT");
+ zend_error_noreturn(E_CORE_ERROR, "Cannot register a reverse output handler conflict outside of MINIT");
}
if (NULL != (rev_ptr = zend_hash_str_find_ptr(&php_output_handler_reverse_conflicts, name, name_len))) {
@@ -658,7 +658,7 @@ PHPAPI zend_result php_output_handler_alias_register(const char *name, size_t na
zend_string *str;
if (!EG(current_module)) {
- zend_error_noreturn(E_ERROR, "Cannot register an output handler alias outside of MINIT");
+ zend_error_noreturn(E_CORE_ERROR, "Cannot register an output handler alias outside of MINIT");
}
str = zend_string_init_interned(name, name_len, 1);
zend_hash_update_ptr(&php_output_handler_aliases, str, func);
diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c
index 08bff649850..fe8502da47e 100644
--- a/sapi/phpdbg/phpdbg_prompt.c
+++ b/sapi/phpdbg/phpdbg_prompt.c
@@ -1815,7 +1815,7 @@ void phpdbg_execute_ex(zend_execute_data *execute_data) /* {{{ */
}
}
}
- zend_error_noreturn(E_ERROR, "Arrived at end of main loop which shouldn't happen");
+ zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
} /* }}} */
/* only if *not* interactive and while executing */