diff options
author | Anatol Belski <ab@php.net> | 2017-04-27 15:39:32 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2017-04-27 15:41:09 +0200 |
commit | 24ae881080f8cfbb56e0981973d4474a831a3398 (patch) | |
tree | 556db6a42b6dd30df3c5b111b149b5de2282fc15 | |
parent | 84b397bf44d656cdedbf9a10aae33f4b51736ccf (diff) | |
download | php-git-24ae881080f8cfbb56e0981973d4474a831a3398.tar.gz |
get rid of two strlen calls
-rw-r--r-- | TSRM/tsrm_win32.c | 13 | ||||
-rw-r--r-- | TSRM/tsrm_win32.h | 2 | ||||
-rw-r--r-- | Zend/zend_virtual_cwd.c | 5 |
3 files changed, 12 insertions, 8 deletions
diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c index 84d153956e..4bd1fcb930 100644 --- a/TSRM/tsrm_win32.c +++ b/TSRM/tsrm_win32.c @@ -107,33 +107,36 @@ TSRM_API void tsrm_win32_shutdown(void) #endif } -char * tsrm_win32_get_path_sid_key(const char *pathname) +char * tsrm_win32_get_path_sid_key(const char *pathname, size_t pathname_len, size_t *key_len) { PSID pSid = TWG(impersonation_token_sid); TCHAR *ptcSid = NULL; char *bucket_key = NULL; - size_t ptc_sid_len, pathname_len; - - pathname_len = strlen(pathname); + size_t ptc_sid_len; if (!pSid) { bucket_key = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, pathname_len + 1); if (!bucket_key) { + *key_len = 0; return NULL; } memcpy(bucket_key, pathname, pathname_len); + *key_len = pathname_len; return bucket_key; } if (!ConvertSidToStringSid(pSid, &ptcSid)) { + *key_len = 0; return NULL; } ptc_sid_len = strlen(ptcSid); - bucket_key = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, pathname_len + ptc_sid_len + 1); + *key_len = pathname_len + ptc_sid_len; + bucket_key = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *key_len + 1); if (!bucket_key) { LocalFree(ptcSid); + *key_len = 0; return NULL; } diff --git a/TSRM/tsrm_win32.h b/TSRM/tsrm_win32.h index 82202296f8..dc74f7948c 100644 --- a/TSRM/tsrm_win32.h +++ b/TSRM/tsrm_win32.h @@ -95,7 +95,7 @@ TSRMLS_CACHE_EXTERN() #define SHM_RND FILE_MAP_WRITE #define SHM_REMAP FILE_MAP_COPY -char * tsrm_win32_get_path_sid_key(const char *pathname ); +char * tsrm_win32_get_path_sid_key(const char *pathname, size_t pathname_len, size_t *key_len); TSRM_API void tsrm_win32_startup(void); TSRM_API void tsrm_win32_shutdown(void); diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c index fd19892c62..2f9c46d1e5 100644 --- a/Zend/zend_virtual_cwd.c +++ b/Zend/zend_virtual_cwd.c @@ -525,7 +525,8 @@ CWD_API char *virtual_getcwd(char *buf, size_t size) /* {{{ */ static inline zend_ulong realpath_cache_key(const char *path, size_t path_len) /* {{{ */ { register zend_ulong h; - char *bucket_key_start = tsrm_win32_get_path_sid_key(path); + size_t bucket_key_len; + char *bucket_key_start = tsrm_win32_get_path_sid_key(path, path_len, &bucket_key_len); char *bucket_key = (char *)bucket_key_start; const char *e; @@ -533,7 +534,7 @@ static inline zend_ulong realpath_cache_key(const char *path, size_t path_len) / return 0; } - e = bucket_key + strlen(bucket_key); + e = bucket_key + bucket_key_len; for (h = Z_UL(2166136261); bucket_key < e;) { h *= Z_UL(16777619); h ^= *bucket_key++; |