Skip to content

Commit 4c87750

Browse files
committed
fix path handling for the file cache
1 parent 2c048af commit 4c87750

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

ext/opcache/zend_file_cache.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,10 +678,26 @@ int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
678678
len = strlen(ZCG(accel_directives).file_cache);
679679
filename = emalloc(len + 33 + ZSTR_LEN(script->full_path) + sizeof(SUFFIX));
680680
memcpy(filename, ZCG(accel_directives).file_cache, len);
681+
#ifndef ZEND_WIN32
681682
filename[len] = '/';
682683
memcpy(filename + len + 1, ZCG(system_id), 32);
683684
memcpy(filename + len + 33, ZSTR_VAL(script->full_path), ZSTR_LEN(script->full_path));
684685
memcpy(filename + len + 33 + ZSTR_LEN(script->full_path), SUFFIX, sizeof(SUFFIX));
686+
#else
687+
filename[len] = '\\';
688+
memcpy(filename + len + 1, ZCG(system_id), 32);
689+
if (ZSTR_LEN(script->full_path) >= 2 && ':' == ZSTR_VAL(script->full_path)[1]) {
690+
/* local fs */
691+
*(filename + len + 33) = '\\';
692+
*(filename + len + 34) = ZSTR_VAL(script->full_path)[0];
693+
memcpy(filename + len + 35, ZSTR_VAL(script->full_path) + 2, ZSTR_LEN(script->full_path) - 2);
694+
memcpy(filename + len + 35 + ZSTR_LEN(script->full_path) - 2, SUFFIX, sizeof(SUFFIX));
695+
} else {
696+
/* network path */
697+
memcpy(filename + len + 33, ZSTR_VAL(script->full_path), ZSTR_LEN(script->full_path));
698+
memcpy(filename + len + 33 + ZSTR_LEN(script->full_path), SUFFIX, sizeof(SUFFIX));
699+
}
700+
#endif
685701

686702
if (zend_file_cache_mkdir(filename, len) != SUCCESS) {
687703
zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot create directory for file '%s'\n", filename);

0 commit comments

Comments
 (0)