summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/opcache/tests/bug78189.phpt22
-rw-r--r--ext/opcache/zend_file_cache.c2
2 files changed, 23 insertions, 1 deletions
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 231affedf3..31f7e20cd6 100644
--- a/ext/opcache/zend_file_cache.c
+++ b/ext/opcache/zend_file_cache.c
@@ -856,7 +856,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, accel_system_id, 32);