[SCM] Samba Shared Repository - branch v3-2-test updated - release-3-2-0pre2-3096-g5109bd3

Jeremy Allison jra at samba.org
Thu Oct 16 22:07:26 GMT 2008


The branch, v3-2-test has been updated
       via  5109bd33719a4bb1534cb0e012c92ec778fb26df (commit)
      from  09fa53d927436310ae3c17096d42e2fa4de1dd2e (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 5109bd33719a4bb1534cb0e012c92ec778fb26df
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Oct 16 15:06:13 2008 -0700

    Unify the logic in pull_ascii_base_talloc() and pull_ucs2_base_talloc().
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source/lib/charcnv.c |   34 +++++++++++++++++++++++++++-------
 1 files changed, 27 insertions(+), 7 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/charcnv.c b/source/lib/charcnv.c
index eec7ae3..f4efcb2 100644
--- a/source/lib/charcnv.c
+++ b/source/lib/charcnv.c
@@ -1183,6 +1183,10 @@ static size_t pull_ascii_base_talloc(TALLOC_CTX *ctx,
 
 	*ppdest = NULL;
 
+	if (!src_len) {
+		return 0;
+	}
+
 	if (flags & STR_TERMINATE) {
 		if (src_len == (size_t)-1) {
 			src_len = strlen((const char *)src) + 1;
@@ -1200,11 +1204,22 @@ static size_t pull_ascii_base_talloc(TALLOC_CTX *ctx,
 					(unsigned int)src_len);
 			smb_panic(msg);
 		}
+	} else {
+		/* Can't have an unlimited length
+		 * non STR_TERMINATE'd.
+		 */
+		if (src_len == (size_t)-1) {
+			errno = EINVAL;
+			return 0;
+		}
 	}
 
+	/* src_len != -1 here. */
+
 	if (!convert_string_allocate(ctx, CH_DOS, CH_UNIX, src, src_len, &dest,
-		&dest_len, True))
+		&dest_len, True)) {
 		dest_len = 0;
+	}
 
 	if (dest_len && dest) {
 		/* Did we already process the terminating zero ? */
@@ -1571,12 +1586,20 @@ size_t pull_ucs2_base_talloc(TALLOC_CTX *ctx,
 		if (src_len >= 1024*1024) {
 			smb_panic("Bad src length in pull_ucs2_base_talloc\n");
 		}
+	} else {
+		/* Can't have an unlimited length
+		 * non STR_TERMINATE'd.
+		 */
+		if (src_len == (size_t)-1) {
+			errno = EINVAL;
+			return 0;
+		}
 	}
 
+	/* src_len != -1 here. */
+
 	/* ucs2 is always a multiple of 2 bytes */
-	if (src_len != (size_t)-1) {
-		src_len &= ~1;
-	}
+	src_len &= ~1;
 
 	dest_len = convert_string_talloc(ctx,
 					CH_UTF16LE,
@@ -1589,9 +1612,6 @@ size_t pull_ucs2_base_talloc(TALLOC_CTX *ctx,
 		dest_len = 0;
 	}
 
-	if (src_len == (size_t)-1)
-		src_len = dest_len*2;
-
 	if (dest_len) {
 		/* Did we already process the terminating zero ? */
 		if (dest[dest_len-1] != 0) {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list