Fix bug 7005 - mangle method = hash truncates files with dot '.' character
authorJeremy Allison <jra@samba.org>
Tue, 22 Dec 2009 05:12:33 +0000 (21:12 -0800)
committerKarolin Seeger <kseeger@samba.org>
Tue, 29 Dec 2009 10:52:00 +0000 (11:52 +0100)
Don't change the contents of a const string via a pointer
alias (or if you do, change it back.....).

Jeremy.
(cherry picked from commit a5bfbad790870ff66d4b09f99f0835ccb61c10ed)

source3/smbd/mangle_hash.c

index b582d19109d6c71a7806bc2ada2af62deef08073..6679b31e9ce4203c420108e6cee20a9e3d4fd562 100644 (file)
@@ -429,6 +429,13 @@ static void cache_mangled_name( const char mangled_name[13],
                if( !s1[i] && !s2[i] ) {
                        /* Truncate at the '.' */
                        *s1 = '\0';
+                       /*
+                        * DANGER WILL ROBINSON - this
+                        * is changing a const string via
+                        * an aliased pointer ! Remember to
+                        * put it back once we've used it.
+                        * JRA
+                        */
                        *s2 = '\0';
                }
        }
@@ -440,6 +447,8 @@ static void cache_mangled_name( const char mangled_name[13],
        } else {
                DEBUG(5,("cache_mangled_name: Stored entry %s -> %s\n", mangled_name_key, raw_name));
        }
+       /* Restore the change we made to the const string. */
+       *s2 = '.';
 }
 
 /* ************************************************************************** **