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 */