diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2019-06-20 17:53:10 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2019-06-20 17:58:32 +0200 |
commit | fcd6f2de60e1fc593fa301f3af42b871624946d9 (patch) | |
tree | de1b4bc743e5c0bb58d0077035cb66577d1b7dff | |
parent | d8202bf9177cdbcb9b87586580dbcd6bb94f0de4 (diff) | |
download | php-git-fcd6f2de60e1fc593fa301f3af42b871624946d9.tar.gz |
Fix #78189: file cache strips last character of uname hash
We must not forget to increase `len` by one to cater to the directory
separator.
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | ext/opcache/tests/bug78189.phpt | 22 | ||||
-rw-r--r-- | ext/opcache/zend_file_cache.c | 2 |
3 files changed, 26 insertions, 1 deletions
@@ -9,6 +9,9 @@ PHP NEWS - Date: . Fixed #69044 (discrepency between time and microtime). (krakjoe) +- OPcache: + . Fixed #78189 (file cache strips last character of uname hash). (cmb) + 27 Jun 2019, PHP 7.2.20 - Core: diff --git a/ext/opcache/tests/bug78189.phpt b/ext/opcache/tests/bug78189.phpt new file mode 100644 index 0000000000..49891c8d63 --- /dev/null +++ b/ext/opcache/tests/bug78189.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #78189 (file cache strips last character of uname hash) +--SKIPIF-- +<?php +if (!extension_loaded('Zend OPcache')) die('skip opcache extension not available'); +if (substr(PHP_OS, 0, 3) !== 'WIN') die('skip this test is for Windows platforms only'); +?> +--INI-- +opcache.enable_cli=1 +opcache.optimization_level=-1 +opcache.file_cache={TMP} +opcache.file_cache_only=1 +--FILE-- +<?php +$tmpdir = sys_get_temp_dir(); +$pattern = $tmpdir . '/*/*/' . str_replace(':', '', __DIR__) . '/bug78189.php.bin'; +foreach (glob($pattern) as $filename) { + var_dump(preg_match('~/[0-9a-f]{32}/~', substr($filename, strlen($tmpdir), 34))); +} +?> +--EXPECT-- +int(1) diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c index 20f21d6a83..39de839e47 100644 --- a/ext/opcache/zend_file_cache.c +++ b/ext/opcache/zend_file_cache.c @@ -775,7 +775,7 @@ static char *zend_file_cache_get_bin_file_path(zend_string *script_path) memcpy(filename, ZCG(accel_directives).file_cache, len); filename[len] = '\\'; memcpy(filename + 1 + len, md5uname, 32); - len += 32; + len += 1 + 32; filename[len] = '\\'; memcpy(filename + len + 1, ZCG(system_id), 32); |