Fix bug 5826 - Directory/Filenames get truncated when 3.2.0 client acesses old server.
authorJeremy Allison <jra@samba.org>
Thu, 16 Oct 2008 18:57:51 +0000 (11:57 -0700)
committerKarolin Seeger <kseeger@samba.org>
Tue, 9 Dec 2008 10:22:18 +0000 (11:22 +0100)
Karolin this is a show-stopper for 3.2.5.
There was some code in pull_ucs2_base_talloc() to cope with this case which
hadn't been added to pull_ascii_base_talloc(). The older Samba returns non
unicode names which is why you are seeing this codepath being executed.
Jeremy.
(cherry picked from commit 09fa53d927436310ae3c17096d42e2fa4de1dd2e)
(cherry picked from commit f3b0e219f1a7660ff275db701935eecbe053fa25)

source/lib/charcnv.c

index cea234fadd13fd1668906bf81a8f1061ae50c45d..eec7ae30afd93a5122b5c4f6de826253bfed2d10 100644 (file)
@@ -1209,7 +1209,21 @@ static size_t pull_ascii_base_talloc(TALLOC_CTX *ctx,
        if (dest_len && dest) {
                /* Did we already process the terminating zero ? */
                if (dest[dest_len-1] != 0) {
-                       dest[dest_len-1] = 0;
+                       size_t size = talloc_get_size(dest);
+                       /* Have we got space to append the '\0' ? */
+                       if (size <= dest_len) {
+                               /* No, realloc. */
+                               dest = TALLOC_REALLOC_ARRAY(ctx, dest, char,
+                                               dest_len+1);
+                               if (!dest) {
+                                       /* talloc fail. */
+                                       dest_len = (size_t)-1;
+                                       return 0;
+                               }
+                       }
+                       /* Yay - space ! */
+                       dest[dest_len] = '\0';
+                       dest_len++;
                }
        } else if (dest) {
                dest[0] = 0;