From: Anatol Belski <ab@php.net>
Date: Fri, 17 Jul 2015 11:50:40 +0000 (+0200)
Subject: fix path handling for the file cache
X-Git-Tag: php-7.0.0beta2~6^2~61
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4c87750c26027431b0688168d90ff75e055524c1;p=php

fix path handling for the file cache
---

diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c
index 9314c89e7a..4c02ca4a55 100644
--- a/ext/opcache/zend_file_cache.c
+++ b/ext/opcache/zend_file_cache.c
@@ -678,10 +678,26 @@ int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
 	len = strlen(ZCG(accel_directives).file_cache);
 	filename = emalloc(len + 33 + ZSTR_LEN(script->full_path) + sizeof(SUFFIX));
 	memcpy(filename, ZCG(accel_directives).file_cache, len);
+#ifndef ZEND_WIN32
 	filename[len] = '/';
 	memcpy(filename + len + 1, ZCG(system_id), 32);
 	memcpy(filename + len + 33, ZSTR_VAL(script->full_path), ZSTR_LEN(script->full_path));
 	memcpy(filename + len + 33 + ZSTR_LEN(script->full_path), SUFFIX, sizeof(SUFFIX));
+#else
+	filename[len] = '\\';
+	memcpy(filename + len + 1, ZCG(system_id), 32);
+	if (ZSTR_LEN(script->full_path) >= 2 && ':' == ZSTR_VAL(script->full_path)[1]) {
+		/* local fs */
+		*(filename + len + 33) = '\\';
+		*(filename + len + 34) = ZSTR_VAL(script->full_path)[0];
+		memcpy(filename + len + 35, ZSTR_VAL(script->full_path) + 2, ZSTR_LEN(script->full_path) - 2);
+		memcpy(filename + len + 35 + ZSTR_LEN(script->full_path) - 2, SUFFIX, sizeof(SUFFIX));
+	} else {
+		/* network path */
+		memcpy(filename + len + 33, ZSTR_VAL(script->full_path), ZSTR_LEN(script->full_path));
+		memcpy(filename + len + 33 + ZSTR_LEN(script->full_path), SUFFIX, sizeof(SUFFIX));
+	}
+#endif
 
 	if (zend_file_cache_mkdir(filename, len) != SUCCESS) {
 		zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot create directory for file '%s'\n", filename);