]> granicus.if.org Git - php/commitdiff
get rid of two strlen calls
authorAnatol Belski <ab@php.net>
Thu, 27 Apr 2017 13:39:32 +0000 (15:39 +0200)
committerAnatol Belski <ab@php.net>
Thu, 27 Apr 2017 13:41:09 +0000 (15:41 +0200)
TSRM/tsrm_win32.c
TSRM/tsrm_win32.h
Zend/zend_virtual_cwd.c

index 84d153956e48c5628fce9573fb5a3624c693551e..4bd1fcb930c3d02d3d36836211a45bf61b96e6d0 100644 (file)
@@ -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;
        }
 
index 82202296f83499eb17494cdde69867456096eb28..dc74f7948ca62f8905c14f8e288b53af36510c4f 100644 (file)
@@ -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);
index fd19892c620f27de78eb23681ca924f3e68899f5..2f9c46d1e502a9f9646c015c9e7e35ca1e7efdc4 100644 (file)
@@ -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++;