From: Anatol Belski Date: Fri, 17 Jul 2015 13:14:25 +0000 (+0200) Subject: fix file cache path calculation at all the places X-Git-Tag: php-7.0.0beta2~6^2~60 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=daba578dbe056260c748f01739d0dd5cfbc5aecd;p=php fix file cache path calculation at all the places moved the corresponding code into a separte function while on that --- diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c index 4c02ca4a55..22de16804a 100644 --- a/ext/opcache/zend_file_cache.c +++ b/ext/opcache/zend_file_cache.c @@ -664,42 +664,52 @@ static void zend_file_cache_serialize(zend_persistent_script *script, new_script->mem = NULL; } -int zend_file_cache_script_store(zend_persistent_script *script, int in_shm) +static char *zend_file_cache_get_bin_file_path(zend_string *script_path) { size_t len; - int fd; char *filename; - zend_file_cache_metainfo info; -#ifndef ZEND_WIN32 - struct iovec vec[3]; -#endif - void *mem, *buf; len = strlen(ZCG(accel_directives).file_cache); - filename = emalloc(len + 33 + ZSTR_LEN(script->full_path) + sizeof(SUFFIX)); + filename = emalloc(len + 33 + ZSTR_LEN(script_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)); + memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path)); + memcpy(filename + len + 33 + ZSTR_LEN(script_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]) { + if (ZSTR_LEN(script_path) >= 2 && ':' == ZSTR_VAL(script_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)); + *(filename + len + 34) = ZSTR_VAL(script_path)[0]; + memcpy(filename + len + 35, ZSTR_VAL(script_path) + 2, ZSTR_LEN(script_path) - 2); + memcpy(filename + len + 35 + ZSTR_LEN(script_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)); + memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path)); + memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path)); + memcpy(filename + len + 33 + ZSTR_LEN(script_path), SUFFIX, sizeof(SUFFIX)); } #endif - if (zend_file_cache_mkdir(filename, len) != SUCCESS) { + return filename; +} + +int zend_file_cache_script_store(zend_persistent_script *script, int in_shm) +{ + int fd; + char *filename; + zend_file_cache_metainfo info; +#ifndef ZEND_WIN32 + struct iovec vec[3]; +#endif + void *mem, *buf; + + filename = zend_file_cache_get_bin_file_path(script->full_path); + + if (zend_file_cache_mkdir(filename, strlen(ZCG(accel_directives).file_cache)) != SUCCESS) { zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot create directory for file '%s'\n", filename); efree(filename); return FAILURE; @@ -1178,7 +1188,6 @@ static void zend_file_cache_unserialize(zend_persistent_script *script, zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handle) { zend_string *full_path = file_handle->opened_path; - size_t len; int fd; char *filename; zend_persistent_script *script; @@ -1190,13 +1199,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl if (!full_path) { return NULL; } - len = strlen(ZCG(accel_directives).file_cache); - filename = emalloc(len + 33 + ZSTR_LEN(full_path) + sizeof(SUFFIX)); - memcpy(filename, ZCG(accel_directives).file_cache, len); - filename[len] = '/'; - memcpy(filename + len + 1, ZCG(system_id), 32); - memcpy(filename + len + 33, ZSTR_VAL(full_path), ZSTR_LEN(full_path)); - memcpy(filename + len + 33 + ZSTR_LEN(full_path), SUFFIX, sizeof(SUFFIX)); + filename = zend_file_cache_get_bin_file_path(full_path); fd = open(filename, O_RDONLY | O_BINARY); if (fd < 0) { @@ -1342,16 +1345,9 @@ use_process_mem: void zend_file_cache_invalidate(zend_string *full_path) { - size_t len; char *filename; - len = strlen(ZCG(accel_directives).file_cache); - filename = emalloc(len + 33 + ZSTR_LEN(full_path) + sizeof(SUFFIX)); - memcpy(filename, ZCG(accel_directives).file_cache, len); - filename[len] = '/'; - memcpy(filename + len + 1, ZCG(system_id), 32); - memcpy(filename + len + 33, ZSTR_VAL(full_path), ZSTR_LEN(full_path)); - memcpy(filename + len + 33 + ZSTR_LEN(full_path), SUFFIX, sizeof(SUFFIX)); + filename = zend_file_cache_get_bin_file_path(full_path); unlink(filename); efree(filename);