. Fixed bug #78525 (Memory leak in pdo when reusing native prepared
statements). (Nikita)
+- PCRE:
+ . Fixed bug #78272 (calling preg_match() before pcntl_fork() will freeze
+ child process). (Nikita)
+
- Standard:
. Fixed bug #76342 (file_get_contents waits twice specified timeout).
(Thomas Calvet)
uname(&name);
/* Kernel version for 10.14.0 (Mojave) */
- map_jit_flag = (atoi(name.release) >= 18) ? MAP_JIT : 0;
+ if (atoi(name.release) >= 18) {
+ /* Only use MAP_JIT if a hardened runtime is used, because MAP_JIT is incompatible
+ with fork(). */
+ void *ptr = mmap(
+ NULL, getpagesize(), PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+ if (ptr == MAP_FAILED) {
+ map_jit_flag = MAP_JIT;
+ } else {
+ map_jit_flag = 0;
+ munmap(ptr, getpagesize());
+ }
+ } else {
+ map_jit_flag = 0;
+ }
}
return map_jit_flag;
--- /dev/null
+--TEST--
+Bug #78272: calling preg_match() before pcntl_fork() will freeze child process
+--SKIPIF--
+<?php
+if (!extension_loaded('pcntl')) die("skip pcntl extension required");
+?>
+--FILE--
+<?php
+preg_match('/abc/', 'abcde', $r);
+
+$pid = pcntl_fork();
+if ($pid === 0) {
+ print "Child start\n";
+ preg_match('/abc/', 'abcde', $r);
+ print_r($r);
+ print "End child\n";
+ exit(0);
+} else {
+ print "Main start\n";
+ pcntl_waitpid($pid, $status);
+ print "End Main\n";
+ exit(0);
+}
+?>
+--EXPECT--
+Main start
+Child start
+Array
+(
+ [0] => abc
+)
+End child
+End Main