mirror of
https://github.com/php/php-src.git
synced 2025-08-18 15:08:55 +02:00
Fixed bug #74663 (Segfault with opcache.memory_protect and validate_timestamp)
This commit is contained in:
parent
ece7d223e8
commit
60912e66c8
5 changed files with 42 additions and 1 deletions
4
NEWS
4
NEWS
|
@ -6,6 +6,10 @@ PHP NEWS
|
||||||
. Fixed bug #74658 (Undefined constants in array properties result in broken
|
. Fixed bug #74658 (Undefined constants in array properties result in broken
|
||||||
properties). (Laruence)
|
properties). (Laruence)
|
||||||
|
|
||||||
|
- Opcache:
|
||||||
|
. Fixed bug #74663 (Segfault with opcache.memory_protect and
|
||||||
|
validate_timestamp). (Laruence)
|
||||||
|
|
||||||
- SPL:
|
- SPL:
|
||||||
. Fixed bug #74478 (null coalescing operator failing with SplFixedArray).
|
. Fixed bug #74478 (null coalescing operator failing with SplFixedArray).
|
||||||
(jhdxr)
|
(jhdxr)
|
||||||
|
|
|
@ -957,6 +957,17 @@ int validate_timestamp_and_record(zend_persistent_script *persistent_script, zen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int validate_timestamp_and_record_ex(zend_persistent_script *persistent_script, zend_file_handle *file_handle)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
SHM_UNPROTECT();
|
||||||
|
ret = validate_timestamp_and_record(persistent_script, file_handle);
|
||||||
|
SHM_PROTECT();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Instead of resolving full real path name each time we need to identify file,
|
/* Instead of resolving full real path name each time we need to identify file,
|
||||||
* we create a key that consist from requested file name, current working
|
* we create a key that consist from requested file name, current working
|
||||||
* directory, current include_path, etc */
|
* directory, current include_path, etc */
|
||||||
|
|
|
@ -331,6 +331,7 @@ void zend_accel_schedule_restart(zend_accel_restart_reason reason);
|
||||||
void zend_accel_schedule_restart_if_necessary(zend_accel_restart_reason reason);
|
void zend_accel_schedule_restart_if_necessary(zend_accel_restart_reason reason);
|
||||||
accel_time_t zend_get_file_handle_timestamp(zend_file_handle *file_handle, size_t *size);
|
accel_time_t zend_get_file_handle_timestamp(zend_file_handle *file_handle, size_t *size);
|
||||||
int validate_timestamp_and_record(zend_persistent_script *persistent_script, zend_file_handle *file_handle);
|
int validate_timestamp_and_record(zend_persistent_script *persistent_script, zend_file_handle *file_handle);
|
||||||
|
int validate_timestamp_and_record_ex(zend_persistent_script *persistent_script, zend_file_handle *file_handle);
|
||||||
int zend_accel_invalidate(const char *filename, int filename_len, zend_bool force);
|
int zend_accel_invalidate(const char *filename, int filename_len, zend_bool force);
|
||||||
int zend_accel_script_optimize(zend_persistent_script *persistent_script);
|
int zend_accel_script_optimize(zend_persistent_script *persistent_script);
|
||||||
int accelerator_shm_read_lock(void);
|
int accelerator_shm_read_lock(void);
|
||||||
|
|
25
ext/opcache/tests/bug74663.phpt
Normal file
25
ext/opcache/tests/bug74663.phpt
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
--TEST--
|
||||||
|
Bug #74663 (Segfault with opcache.memory_protect and validate_timestamp)
|
||||||
|
--INI--
|
||||||
|
opcache.enable=1
|
||||||
|
opcache.enable_cli=1
|
||||||
|
opcache.file_update_protection=0
|
||||||
|
opcache.enable_file_override=1
|
||||||
|
opcache.validate_timestamps=1
|
||||||
|
opcache.revalidate_freq=0
|
||||||
|
opcache.protect_memory=1
|
||||||
|
--SKIPIF--
|
||||||
|
<?php require_once('skipif.inc'); ?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
$file = __DIR__ . "/bug74663.inc";
|
||||||
|
file_put_contents($file, "");
|
||||||
|
include $file;
|
||||||
|
|
||||||
|
var_dump(is_file($file));
|
||||||
|
?>
|
||||||
|
--CLEAN--
|
||||||
|
<?php
|
||||||
|
unlink(__DIR__ . "/bug74663.inc");
|
||||||
|
--EXPECT--
|
||||||
|
bool(true)
|
|
@ -341,7 +341,7 @@ static int filename_is_in_cache(zend_string *filename)
|
||||||
handle.type = ZEND_HANDLE_FILENAME;
|
handle.type = ZEND_HANDLE_FILENAME;
|
||||||
|
|
||||||
if (ZCG(accel_directives).validate_timestamps) {
|
if (ZCG(accel_directives).validate_timestamps) {
|
||||||
return validate_timestamp_and_record(persistent_script, &handle) == SUCCESS;
|
return validate_timestamp_and_record_ex(persistent_script, &handle) == SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue