From 1171b0c9ac59e7bd667bb82f48cda27c203721d8 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 17 Mar 2003 03:47:15 +0000 Subject: Fix memory leaks and add parinoioa code to our stat() cache. Andrew Bartlett (This used to be commit 3fd07bd25eefdb2a7a6891fa1169ab2425607249) --- source3/smbd/statcache.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/source3/smbd/statcache.c b/source3/smbd/statcache.c index 812e0dde375..57ba6ada813 100644 --- a/source3/smbd/statcache.c +++ b/source3/smbd/statcache.c @@ -90,14 +90,28 @@ void stat_cache_add( char *full_orig_name, char *orig_translated_path) } original_path = strdup(full_orig_name); - if (!original_path) + if (!original_path) { + SAFE_FREE(translated_path); return; + } original_path_length = strlen(original_path); + if(original_path[original_path_length-1] == '/') { + original_path[original_path_length-1] = '\0'; + original_path_length--; + } + if(!case_sensitive) strupper(original_path); - + + if(!(original_path_length == translated_path_length)) { + DEBUG(0, ("OOPS - tried to store stat cache entry for non-equal length paths [%s] %u and [%s] %u)!\n", original_path, original_path_length, translated_path, translated_path_length)); + SAFE_FREE(original_path); + SAFE_FREE(translated_path); + return; + } + #if 0 /* * We will only replace namelen characters @@ -119,6 +133,8 @@ void stat_cache_add( char *full_orig_name, char *orig_translated_path) found_scp = (stat_cache_entry *)(hash_elem->value); if (strcmp((found_scp->translated_path), orig_translated_path) == 0) { /* already in hash table */ + SAFE_FREE(original_path); + SAFE_FREE(translated_path); return; } /* hash collision - remove before we re-add */ @@ -133,6 +149,8 @@ void stat_cache_add( char *full_orig_name, char *orig_translated_path) +original_path_length +translated_path_length)) == NULL) { DEBUG(0,("stat_cache_add: Out of memory !\n")); + SAFE_FREE(original_path); + SAFE_FREE(translated_path); return; } @@ -144,6 +162,9 @@ void stat_cache_add( char *full_orig_name, char *orig_translated_path) hash_insert(&stat_cache, (char *)scp, original_path); + SAFE_FREE(original_path); + SAFE_FREE(translated_path); + DEBUG(5,("stat_cache_add: Added entry %s -> %s\n", scp->original_path, scp->translated_path)); } -- cgit