From f3b0e219f1a7660ff275db701935eecbe053fa25 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 16 Oct 2008 11:57:51 -0700 Subject: Fix bug 5826 - Directory/Filenames get truncated when 3.2.0 client acesses old server. 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) --- source/lib/charcnv.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'source') diff --git a/source/lib/charcnv.c b/source/lib/charcnv.c index cea234fadd1..eec7ae30afd 100644 --- a/source/lib/charcnv.c +++ b/source/lib/charcnv.c @@ -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; -- cgit