]> granicus.if.org Git - php/commitdiff
Fix bug 54866
authorRasmus Lerdorf <rasmus@php.net>
Thu, 19 May 2011 23:09:58 +0000 (23:09 +0000)
committerRasmus Lerdorf <rasmus@php.net>
Thu, 19 May 2011 23:09:58 +0000 (23:09 +0000)
NEWS
TSRM/tsrm_virtual_cwd.c

diff --git a/NEWS b/NEWS
index 491c176986b9c2298e6512909f0bcb336e50154a..236fbc35121ef11e223e837c28df1a91c9370453 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -32,8 +32,9 @@ PHP                                                                        NEWS
     (tomas dot brastavicius at quantum dot lt, Pierrick)
   . Fixed bug #48465 (sys_get_temp_dir() possibly inconsistent when using 
     TMPDIR on Windows). (Pierre)
+  . Fixed bug 54866 (incorrect accounting for realpath_cache_size) (Dustin Ward)
 
-- cURL
+- cURL:
   . Added CURLINFO_REDIRECT_URL support. (Daniel Stenberg, Pierre)
   . Added support for CURLOPT_MAX_RECV_SPEED_LARGE and 
     CURLOPT_MAX_SEND_SPEED_LARGE. FR #51815. (Pierrick)
index 6fdf9eb994949b7a5bd9047d9c605cc0542ad7b5..b3d12e2b9592972d170bc144f378312592ae6ff1 100644 (file)
@@ -629,7 +629,13 @@ CWD_API void realpath_cache_del(const char *path, int path_len TSRMLS_DC) /* {{{
                                        memcmp(path, (*bucket)->path, path_len) == 0) {
                        realpath_cache_bucket *r = *bucket;
                        *bucket = (*bucket)->next;
-                       CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
+                  
+                       /* if the pointers match then only subtract the length of the path */
+                       if(r->path == r->realpath) 
+                            CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1;
+                        else
+                            CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
+                  
                        free(r);
                        return;
                } else {
@@ -704,7 +710,13 @@ static inline realpath_cache_bucket* realpath_cache_find(const char *path, int p
                if (CWDG(realpath_cache_ttl) && (*bucket)->expires < t) {
                        realpath_cache_bucket *r = *bucket;
                        *bucket = (*bucket)->next;
-                       CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
+
+                       /* if the pointers match then only subtract the length of the path */              
+                       if(r->path == r->realpath) 
+                            CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1;
+                        else
+                            CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
+                  
                        free(r);
                } else if (key == (*bucket)->key && path_len == (*bucket)->path_len &&
                                        memcmp(path, (*bucket)->path, path_len) == 0) {