summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-12-10 14:29:58 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-01-06 22:41:55 +0100
commit59c3ddab13b5cc38e9406538801be8e134626793 (patch)
tree6699ef00825693ceed1c4892ac58b6d31b8d215b
parent846b6479537a112d1ded725e6484e46462048b35 (diff)
downloadphp-git-59c3ddab13b5cc38e9406538801be8e134626793.tar.gz
Remove support for preloading on Windows
Due to ASLR restrictions, preloading on Windows does not work with any code that has preloading dependencies on internal classes. This effectively makes it unusable for any non-trivial codebase. Instead of pretending like preloading is going to work, only to make people realize that it really doesn't once they get beyond a dummy example, we disable support for preloading on Windows entirely. Closes GH-4999.
-rw-r--r--NEWS1
-rw-r--r--ext/ffi/tests/300-win32.phpt24
-rw-r--r--ext/ffi/tests/bug78761.phpt5
-rw-r--r--ext/opcache/ZendAccelerator.c69
-rw-r--r--ext/opcache/tests/bug78014.phpt5
-rw-r--r--ext/opcache/tests/bug78175.phpt5
-rw-r--r--ext/opcache/tests/bug78175_2.phpt5
-rw-r--r--ext/opcache/tests/bug78376.phpt7
-rw-r--r--ext/opcache/tests/bug78937_1.phpt5
-rw-r--r--ext/opcache/tests/bug78937_2.phpt7
-rw-r--r--ext/opcache/tests/bug78937_3.phpt5
-rw-r--r--ext/opcache/tests/bug78937_4.phpt7
-rw-r--r--ext/opcache/tests/bug78937_5.phpt7
-rw-r--r--ext/opcache/tests/bug78937_6.phpt5
-rw-r--r--ext/opcache/tests/preload_001.phpt5
-rw-r--r--ext/opcache/tests/preload_002.phpt5
-rw-r--r--ext/opcache/tests/preload_003.phpt5
-rw-r--r--ext/opcache/tests/preload_004.phpt5
-rw-r--r--ext/opcache/tests/preload_005.phpt5
-rw-r--r--ext/opcache/tests/preload_006.phpt1
-rw-r--r--ext/opcache/tests/preload_007.phpt5
-rw-r--r--ext/opcache/tests/preload_008.phpt5
-rw-r--r--ext/opcache/tests/preload_009.phpt5
-rw-r--r--ext/opcache/tests/preload_010.phpt5
-rw-r--r--ext/opcache/tests/preload_011.phpt5
-rw-r--r--ext/opcache/tests/preload_012.phpt5
-rw-r--r--ext/opcache/tests/preload_013.phpt5
-rw-r--r--ext/opcache/tests/preload_class_alias.phpt5
-rw-r--r--ext/opcache/tests/preload_class_alias_2.phpt5
-rw-r--r--ext/opcache/tests/preload_loadable_classes_1.phpt5
-rw-r--r--ext/opcache/tests/preload_loadable_classes_2.phpt5
-rw-r--r--ext/opcache/tests/preload_loadable_classes_3.phpt5
-rw-r--r--ext/opcache/tests/preload_loadable_classes_4.inc3
-rw-r--r--ext/opcache/tests/preload_loadable_classes_4.phpt16
-rw-r--r--ext/opcache/tests/preload_trait_static.phpt5
-rw-r--r--ext/opcache/tests/preload_unresolved_prop_type.phpt5
-rw-r--r--ext/opcache/tests/preload_windows.phpt16
37 files changed, 147 insertions, 141 deletions
diff --git a/NEWS b/NEWS
index 9a28926ff6..fc7cf905d4 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,7 @@ PHP NEWS
?? ??? ????, PHP 7.4.2
- Core:
+ . Preloading support on Windows has been disabled. (Nikita)
. Fixed bug #79022 (class_exists returns True for classes that are not ready
to be used). (Laruence)
. Fixed bug #78929 (plus signs in cookie values are converted to spaces).
diff --git a/ext/ffi/tests/300-win32.phpt b/ext/ffi/tests/300-win32.phpt
deleted file mode 100644
index 9fd9fac4c4..0000000000
--- a/ext/ffi/tests/300-win32.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-FFI 300: FFI preloading on Windows
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
-<?php if (!extension_loaded('Zend OPcache')) die('skip Zend OPcache extension not available'); ?>
-<?php if (substr(PHP_OS, 0, 3) != 'WIN') die('skip for Windows only'); ?>
---INI--
-ffi.enable=1
-opcache.enable=1
-opcache.enable_cli=1
-opcache.optimization_level=-1
-opcache.preload={PWD}/preload.inc
---FILE--
-<?php
-$ffi = FFI::scope("TEST_300_WIN32");
-$ffi->php_printf("Hello World from %s!\n", "PHP");
-?>
---CLEAN--
-<?php
- $fn = __DIR__ . "/300-win32.h";
- unlink($fn);
-?>
---EXPECT--
-Hello World from PHP!
diff --git a/ext/ffi/tests/bug78761.phpt b/ext/ffi/tests/bug78761.phpt
index 1db977a841..0e6ae1b3b8 100644
--- a/ext/ffi/tests/bug78761.phpt
+++ b/ext/ffi/tests/bug78761.phpt
@@ -1,7 +1,10 @@
--TEST--
Bug #78761 (Zend memory heap corruption with preload and casting)
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--INI--
opcache.enable_cli=1
opcache.preload={PWD}/bug78761_preload.php
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c
index 1cb21cd130..e19980ab05 100644
--- a/ext/opcache/ZendAccelerator.c
+++ b/ext/opcache/ZendAccelerator.c
@@ -3397,13 +3397,6 @@ static void get_unlinked_dependency(zend_class_entry *ce, const char **kind, con
*name = ZSTR_VAL(ce->parent_name);
return;
}
-#ifdef ZEND_WIN32
- if (p->type == ZEND_INTERNAL_CLASS) {
- *kind = "Windows can't link to internal parent ";
- *name = ZSTR_VAL(ce->parent_name);
- return;
- }
-#endif
if (!(p->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
*kind = "Parent with unresolved initializers ";
*name = ZSTR_VAL(ce->parent_name);
@@ -3523,13 +3516,6 @@ static zend_bool preload_try_resolve_property_types(zend_class_entry *ce)
continue;
}
if (p != ce) {
-#ifdef ZEND_WIN32
- /* On Windows we can't link with internal class, because of ASLR */
- if (p->type == ZEND_INTERNAL_CLASS) {
- ok = 0;
- continue;
- }
-#endif
if (!(p->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
ok = 0;
continue;
@@ -3666,10 +3652,6 @@ static void preload_link(void)
parent = zend_hash_find_ptr(EG(class_table), key);
zend_string_release(key);
if (!parent) continue;
-#ifdef ZEND_WIN32
- /* On Windows we can't link with internal class, because of ASLR */
- if (parent->type == ZEND_INTERNAL_CLASS) continue;
-#endif
if (!(parent->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
continue;
}
@@ -3686,13 +3668,6 @@ static void preload_link(void)
found = 0;
break;
}
-#ifdef ZEND_WIN32
- /* On Windows we can't link with internal class, because of ASLR */
- if (p->type == ZEND_INTERNAL_CLASS) {
- found = 0;
- break;
- }
-#endif
if (!(p->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
found = 0;
break;
@@ -3709,13 +3684,6 @@ static void preload_link(void)
found = 0;
break;
}
-#ifdef ZEND_WIN32
- /* On Windows we can't link with internal class, because of ASLR */
- if (p->type == ZEND_INTERNAL_CLASS) {
- found = 0;
- break;
- }
-#endif
}
if (!found) continue;
}
@@ -3859,26 +3827,6 @@ static void preload_link(void)
} ZEND_HASH_FOREACH_END();
}
-#ifdef ZEND_WIN32
-static void preload_check_windows_restriction(zend_class_entry *scope, zend_class_entry *ce) {
- if (ce && ce->type == ZEND_INTERNAL_CLASS) {
- zend_error_noreturn(E_ERROR,
- "Class %s uses internal class %s during preloading, which is not supported on Windows",
- ZSTR_VAL(scope->name), ZSTR_VAL(ce->name));
- }
-}
-
-static void preload_check_windows_restrictions(zend_class_entry *scope) {
- uint32_t i;
-
- preload_check_windows_restriction(scope, scope->parent);
-
- for (i = 0; i < scope->num_interfaces; i++) {
- preload_check_windows_restriction(scope, scope->interfaces[i]);
- }
-}
-#endif
-
static inline int preload_update_class_constants(zend_class_entry *ce) {
/* This is a separate function to work around what appears to be a bug in GCC
* maybe-uninitialized analysis. */
@@ -3931,10 +3879,6 @@ static void preload_ensure_classes_loadable() {
continue;
}
-#ifdef ZEND_WIN32
- preload_check_windows_restrictions(ce);
-#endif
-
if (!(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
if (preload_update_class_constants(ce) == FAILURE) {
zend_error_noreturn(E_ERROR,
@@ -4601,9 +4545,11 @@ static int accel_finish_startup(void)
}
if (ZCG(accel_directives).preload && *ZCG(accel_directives).preload) {
-#ifndef ZEND_WIN32
+#ifdef ZEND_WIN32
+ zend_accel_error(ACCEL_LOG_ERROR, "Preloading is not supported on Windows");
+ return FAILURE;
+#else
int in_child = 0;
-#endif
int ret = SUCCESS;
int rc;
int orig_error_reporting;
@@ -4637,7 +4583,6 @@ static int accel_finish_startup(void)
return SUCCESS;
}
-#ifndef ZEND_WIN32
if (geteuid() == 0) {
pid_t pid;
struct passwd *pw;
@@ -4701,7 +4646,6 @@ static int accel_finish_startup(void)
zend_accel_error(ACCEL_LOG_WARNING, "\"opcache.preload_user\" is ignored");
}
}
-#endif
sapi_module.activate = NULL;
sapi_module.deactivate = NULL;
@@ -4713,11 +4657,9 @@ static int accel_finish_startup(void)
sapi_module.ub_write = preload_ub_write;
sapi_module.flush = preload_flush;
-#ifndef ZEND_WIN32
if (in_child) {
CG(compiler_options) |= ZEND_COMPILE_PRELOAD_IN_CHILD;
}
-#endif
CG(compiler_options) |= ZEND_COMPILE_PRELOAD;
CG(compiler_options) |= ZEND_COMPILE_HANDLE_OP_ARRAY;
CG(compiler_options) |= ZEND_COMPILE_IGNORE_INTERNAL_CLASSES;
@@ -4792,7 +4734,6 @@ static int accel_finish_startup(void)
sapi_activate();
-#ifndef ZEND_WIN32
if (in_child) {
if (ret == SUCCESS) {
exit(0);
@@ -4800,9 +4741,9 @@ static int accel_finish_startup(void)
exit(2);
}
}
-#endif
return ret;
+#endif
}
return SUCCESS;
diff --git a/ext/opcache/tests/bug78014.phpt b/ext/opcache/tests/bug78014.phpt
index 14f205e7b8..47ec05977c 100644
--- a/ext/opcache/tests/bug78014.phpt
+++ b/ext/opcache/tests/bug78014.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_bug78014.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
class B extends A {
diff --git a/ext/opcache/tests/bug78175.phpt b/ext/opcache/tests/bug78175.phpt
index eb513e3f01..b477e04fe6 100644
--- a/ext/opcache/tests/bug78175.phpt
+++ b/ext/opcache/tests/bug78175.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_bug78175.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
OK
--EXPECT--
diff --git a/ext/opcache/tests/bug78175_2.phpt b/ext/opcache/tests/bug78175_2.phpt
index 1d736f6e10..7b5ad850ae 100644
--- a/ext/opcache/tests/bug78175_2.phpt
+++ b/ext/opcache/tests/bug78175_2.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_bug78175_2.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump(get_class(Loader::getLoader()));
diff --git a/ext/opcache/tests/bug78376.phpt b/ext/opcache/tests/bug78376.phpt
index efc69c927e..5a8ed8b15a 100644
--- a/ext/opcache/tests/bug78376.phpt
+++ b/ext/opcache/tests/bug78376.phpt
@@ -6,10 +6,13 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_bug78376.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump(\A::$a);
?>
--EXPECT--
-string(4) "aaaa" \ No newline at end of file
+string(4) "aaaa"
diff --git a/ext/opcache/tests/bug78937_1.phpt b/ext/opcache/tests/bug78937_1.phpt
index 1125ad4eb0..bc285f107b 100644
--- a/ext/opcache/tests/bug78937_1.phpt
+++ b/ext/opcache/tests/bug78937_1.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_bug78937.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
class Bar {
diff --git a/ext/opcache/tests/bug78937_2.phpt b/ext/opcache/tests/bug78937_2.phpt
index 880063298b..a20c07d231 100644
--- a/ext/opcache/tests/bug78937_2.phpt
+++ b/ext/opcache/tests/bug78937_2.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_bug78937.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
include(__DIR__ . "/preload_bug78937.inc");
@@ -19,4 +22,4 @@ Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78
Warning: Can't preload unlinked class class@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3
object(class@anonymous)#%d (0) {
-} \ No newline at end of file
+}
diff --git a/ext/opcache/tests/bug78937_3.phpt b/ext/opcache/tests/bug78937_3.phpt
index 1c706e237d..16f7b80a40 100644
--- a/ext/opcache/tests/bug78937_3.phpt
+++ b/ext/opcache/tests/bug78937_3.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_bug78937.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
include(__DIR__ . "/preload_bug78937.inc");
diff --git a/ext/opcache/tests/bug78937_4.phpt b/ext/opcache/tests/bug78937_4.phpt
index b555516d00..2ad86870de 100644
--- a/ext/opcache/tests/bug78937_4.phpt
+++ b/ext/opcache/tests/bug78937_4.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_bug78937.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
class Bar {
@@ -19,4 +22,4 @@ Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78
Warning: Can't preload unlinked class class@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3
-Fatal error: Class foo wasn't preloaded in %spreload_bug78937.inc on line 6 \ No newline at end of file
+Fatal error: Class foo wasn't preloaded in %spreload_bug78937.inc on line 6
diff --git a/ext/opcache/tests/bug78937_5.phpt b/ext/opcache/tests/bug78937_5.phpt
index f9f01a2a26..3502699750 100644
--- a/ext/opcache/tests/bug78937_5.phpt
+++ b/ext/opcache/tests/bug78937_5.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_bug78937.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
include(__DIR__ . "/preload_bug78937.inc");
@@ -20,4 +23,4 @@ Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78
Warning: Can't preload unlinked class class@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3
object(Foo)#%d (0) {
-} \ No newline at end of file
+}
diff --git a/ext/opcache/tests/bug78937_6.phpt b/ext/opcache/tests/bug78937_6.phpt
index 28dcb0ce53..ec1cc2d277 100644
--- a/ext/opcache/tests/bug78937_6.phpt
+++ b/ext/opcache/tests/bug78937_6.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_bug78937.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
include(__DIR__ . "/preload_bug78937.inc");
diff --git a/ext/opcache/tests/preload_001.phpt b/ext/opcache/tests/preload_001.phpt
index 8b1fa1ff31..56ed196e99 100644
--- a/ext/opcache/tests/preload_001.phpt
+++ b/ext/opcache/tests/preload_001.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump(function_exists("f1"));
diff --git a/ext/opcache/tests/preload_002.phpt b/ext/opcache/tests/preload_002.phpt
index 18fe56d4ba..0115ff0564 100644
--- a/ext/opcache/tests/preload_002.phpt
+++ b/ext/opcache/tests/preload_002.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump((new ReflectionMethod('x', 'foo'))->getPrototype()->class);
diff --git a/ext/opcache/tests/preload_003.phpt b/ext/opcache/tests/preload_003.phpt
index b808387967..9ecec31aae 100644
--- a/ext/opcache/tests/preload_003.phpt
+++ b/ext/opcache/tests/preload_003.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
Y::foo();
diff --git a/ext/opcache/tests/preload_004.phpt b/ext/opcache/tests/preload_004.phpt
index 7242d071cb..be83c45369 100644
--- a/ext/opcache/tests/preload_004.phpt
+++ b/ext/opcache/tests/preload_004.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_undef_const.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump(class_exists('Foo'));
diff --git a/ext/opcache/tests/preload_005.phpt b/ext/opcache/tests/preload_005.phpt
index 1bcfae4d79..67e44610bc 100644
--- a/ext/opcache/tests/preload_005.phpt
+++ b/ext/opcache/tests/preload_005.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_globals.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
$x = 123;
diff --git a/ext/opcache/tests/preload_006.phpt b/ext/opcache/tests/preload_006.phpt
index b597d8eff8..76d9629774 100644
--- a/ext/opcache/tests/preload_006.phpt
+++ b/ext/opcache/tests/preload_006.phpt
@@ -8,6 +8,7 @@ opcache.preload={PWD}/preload_inheritance_error_ind.inc
--SKIPIF--
<?php
require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
if (getenv('SKIP_ASAN')) die('xfail Startup failure leak');
?>
--FILE--
diff --git a/ext/opcache/tests/preload_007.phpt b/ext/opcache/tests/preload_007.phpt
index 2054cd8740..79c2a6737a 100644
--- a/ext/opcache/tests/preload_007.phpt
+++ b/ext/opcache/tests/preload_007.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_include.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
echo "Foobar";
diff --git a/ext/opcache/tests/preload_008.phpt b/ext/opcache/tests/preload_008.phpt
index 2e630be9a0..8d7b42cab5 100644
--- a/ext/opcache/tests/preload_008.phpt
+++ b/ext/opcache/tests/preload_008.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump(get_anon());
diff --git a/ext/opcache/tests/preload_009.phpt b/ext/opcache/tests/preload_009.phpt
index 1adbf5b006..f3a28675e3 100644
--- a/ext/opcache/tests/preload_009.phpt
+++ b/ext/opcache/tests/preload_009.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_undef_const_2.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump(trait_exists('T'));
diff --git a/ext/opcache/tests/preload_010.phpt b/ext/opcache/tests/preload_010.phpt
index 80967f64a6..4e5121f23c 100644
--- a/ext/opcache/tests/preload_010.phpt
+++ b/ext/opcache/tests/preload_010.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_overwritten_prop_init.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump((new Bar)->prop);
diff --git a/ext/opcache/tests/preload_011.phpt b/ext/opcache/tests/preload_011.phpt
index 32863398a9..59be0493b4 100644
--- a/ext/opcache/tests/preload_011.phpt
+++ b/ext/opcache/tests/preload_011.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_variance_ind.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
interface K {}
diff --git a/ext/opcache/tests/preload_012.phpt b/ext/opcache/tests/preload_012.phpt
index 0883064ff4..bd3fd81bbd 100644
--- a/ext/opcache/tests/preload_012.phpt
+++ b/ext/opcache/tests/preload_012.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_const_autoload.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
===DONE===
--EXPECTF--
diff --git a/ext/opcache/tests/preload_013.phpt b/ext/opcache/tests/preload_013.phpt
index f6387c08e1..925a1fc5ef 100644
--- a/ext/opcache/tests/preload_013.phpt
+++ b/ext/opcache/tests/preload_013.phpt
@@ -7,7 +7,10 @@ opcache.optimization_level=-1
opcache.preload={PWD}/preload_nested_function.inc
opcache.interned_strings_buffer=0
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
test();
diff --git a/ext/opcache/tests/preload_class_alias.phpt b/ext/opcache/tests/preload_class_alias.phpt
index aee94426d0..3c615c409a 100644
--- a/ext/opcache/tests/preload_class_alias.phpt
+++ b/ext/opcache/tests/preload_class_alias.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_class_alias.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump(class_exists('A'));
diff --git a/ext/opcache/tests/preload_class_alias_2.phpt b/ext/opcache/tests/preload_class_alias_2.phpt
index 6dc2c21a8a..82167afa9b 100644
--- a/ext/opcache/tests/preload_class_alias_2.phpt
+++ b/ext/opcache/tests/preload_class_alias_2.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_class_alias_2.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump(class_exists('B'));
diff --git a/ext/opcache/tests/preload_loadable_classes_1.phpt b/ext/opcache/tests/preload_loadable_classes_1.phpt
index 8673814403..c89633343c 100644
--- a/ext/opcache/tests/preload_loadable_classes_1.phpt
+++ b/ext/opcache/tests/preload_loadable_classes_1.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_loadable_classes_1.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
var_dump(class_exists('Test'));
diff --git a/ext/opcache/tests/preload_loadable_classes_2.phpt b/ext/opcache/tests/preload_loadable_classes_2.phpt
index fc3fb1dc40..d561837bd0 100644
--- a/ext/opcache/tests/preload_loadable_classes_2.phpt
+++ b/ext/opcache/tests/preload_loadable_classes_2.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_loadable_classes_2.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
Unreachable
--EXPECTF--
diff --git a/ext/opcache/tests/preload_loadable_classes_3.phpt b/ext/opcache/tests/preload_loadable_classes_3.phpt
index a48692960a..78efb16804 100644
--- a/ext/opcache/tests/preload_loadable_classes_3.phpt
+++ b/ext/opcache/tests/preload_loadable_classes_3.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_loadable_classes_3.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
Unreachable
--EXPECTF--
diff --git a/ext/opcache/tests/preload_loadable_classes_4.inc b/ext/opcache/tests/preload_loadable_classes_4.inc
deleted file mode 100644
index 162de6eab2..0000000000
--- a/ext/opcache/tests/preload_loadable_classes_4.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-
-class Test extends Exception {}
diff --git a/ext/opcache/tests/preload_loadable_classes_4.phpt b/ext/opcache/tests/preload_loadable_classes_4.phpt
deleted file mode 100644
index 07f0d094ce..0000000000
--- a/ext/opcache/tests/preload_loadable_classes_4.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Preloading: Loadable class checking (4)
---INI--
-opcache.enable=1
-opcache.enable_cli=1
-opcache.optimization_level=-1
-opcache.preload={PWD}/preload_loadable_classes_4.inc
---SKIPIF--
-<?php
-require_once('skipif.inc');
-if (PHP_OS_FAMILY != 'Windows') die('skip Windows only');
-?>
---FILE--
-Unreachable
---EXPECTF--
-Fatal error: Class Test uses internal class Exception during preloading, which is not supported on Windows in Unknown on line 0
diff --git a/ext/opcache/tests/preload_trait_static.phpt b/ext/opcache/tests/preload_trait_static.phpt
index 55e3a2cd8a..c767ad6a9b 100644
--- a/ext/opcache/tests/preload_trait_static.phpt
+++ b/ext/opcache/tests/preload_trait_static.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_trait_static.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
<?php
$bar = new Bar;
diff --git a/ext/opcache/tests/preload_unresolved_prop_type.phpt b/ext/opcache/tests/preload_unresolved_prop_type.phpt
index 117f36692a..3e2accd19e 100644
--- a/ext/opcache/tests/preload_unresolved_prop_type.phpt
+++ b/ext/opcache/tests/preload_unresolved_prop_type.phpt
@@ -6,7 +6,10 @@ opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload_unresolved_prop_type.inc
--SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
+?>
--FILE--
===DONE===
--EXPECTF--
diff --git a/ext/opcache/tests/preload_windows.phpt b/ext/opcache/tests/preload_windows.phpt
new file mode 100644
index 0000000000..0414cfa0b5
--- /dev/null
+++ b/ext/opcache/tests/preload_windows.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Preloading is not supported on Windows
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload.inc
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+if (PHP_OS_FAMILY != 'Windows') die('skip Windows only test');
+?>
+--FILE--
+Unreachable
+--EXPECTF--
+%s: Error Preloading is not supported on Windows