r25222: Fix last assumptions that (size_t)-1 can be used
authorJeremy Allison <jra@samba.org>
Wed, 19 Sep 2007 09:40:40 +0000 (09:40 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:30:51 +0000 (12:30 -0500)
as a special dest_len of sizeof(pstring).
Jeremy.
(This used to be commit 9fc14c83cc5e3a360464c33e26b1073db63763d7)

source3/lib/charcnv.c
source3/modules/vfs_catia.c

index 26c50c1391dfd91469ee12e068923e13cd32a4a6..3f9beb02546964c0a9b4f2f475365aa5e4be223c 100644 (file)
@@ -745,7 +745,7 @@ size_t unix_strupper(const char *src, size_t srclen, char *dest, size_t destlen)
 
        size = push_ucs2_allocate(&buffer, src);
        if (size == (size_t)-1) {
-               smb_panic("failed to create UCS2 buffer");
+               return 0;
        }
        if (!strupper_w(buffer) && (dest == src)) {
                free(buffer);
@@ -1068,8 +1068,11 @@ size_t pull_ascii(char *dest, const void *src, size_t dest_len, size_t src_len,
 {
        size_t ret;
 
-       if (dest_len == (size_t)-1)
-               dest_len = sizeof(pstring);
+       if (dest_len == (size_t)-1) {
+               /* No longer allow dest_len of -1. */
+               smb_panic("pull_ascii - invalid dest_len of -1");
+               return 0;
+       }
 
        if (flags & STR_TERMINATE) {
                if (src_len == (size_t)-1) {
@@ -1213,7 +1216,7 @@ size_t pull_ascii_nstring(char *dest, size_t dest_len, const void *src)
  * </dl>
  *
  * @param dest_len is the maximum length allowed in the
- * destination. If dest_len is -1 then no maxiumum is used.
+ * destination.
  **/
 
 size_t push_ucs2(const void *base_ptr, void *dest, const char *src, size_t dest_len, int flags)
@@ -1222,9 +1225,11 @@ size_t push_ucs2(const void *base_ptr, void *dest, const char *src, size_t dest_
        size_t src_len;
        size_t ret;
 
-       /* treat a pstring as "unlimited" length */
-       if (dest_len == (size_t)-1)
-               dest_len = sizeof(pstring);
+       if (dest_len == (size_t)-1) {
+               /* No longer allow dest_len of -1. */
+               smb_panic("push_ucs2 - invalid dest_len of -1");
+               return 0;
+       }
 
        if (flags & STR_TERMINATE)
                src_len = (size_t)-1;
@@ -1315,23 +1320,33 @@ size_t push_ucs2_allocate(smb_ucs2_t **dest, const char *src)
 
 static size_t push_utf8(void *dest, const char *src, size_t dest_len, int flags)
 {
-       size_t src_len = strlen(src);
-       pstring tmpbuf;
+       size_t src_len = 0;
+       size_t ret;
+       char *tmpbuf = NULL;
 
-       /* treat a pstring as "unlimited" length */
-       if (dest_len == (size_t)-1)
-               dest_len = sizeof(pstring);
+       if (dest_len == (size_t)-1) {
+               /* No longer allow dest_len of -1. */
+               smb_panic("push_utf8 - invalid dest_len of -1");
+               return 0;
+       }
 
        if (flags & STR_UPPER) {
-               pstrcpy(tmpbuf, src);
-               strupper_m(tmpbuf);
+               tmpbuf = strdup_upper(src);
+               if (!tmpbuf) {
+                       return 0;
+               }
                src = tmpbuf;
+               src_len = strlen(src);
        }
 
-       if (flags & STR_TERMINATE)
+       src_len = strlen(src);
+       if (flags & STR_TERMINATE) {
                src_len++;
+       }
 
-       return convert_string(CH_UNIX, CH_UTF8, src, src_len, dest, dest_len, True);
+       ret = convert_string(CH_UNIX, CH_UTF8, src, src_len, dest, dest_len, True);
+       SAFE_FREE(tmpbuf);
+       return ret;
 }
 
 size_t push_utf8_fstring(void *dest, const char *src)
@@ -1390,8 +1405,11 @@ size_t pull_ucs2(const void *base_ptr, char *dest, const void *src, size_t dest_
                return 0;
        }
 
-       if (dest_len == (size_t)-1)
-               dest_len = sizeof(pstring);
+       if (dest_len == (size_t)-1) {
+               /* No longer allow dest_len of -1. */
+               smb_panic("push_utf8 - invalid dest_len of -1");
+               return 0;
+       }
 
        if (ucs2_align(base_ptr, src, flags)) {
                src = (const void *)((const char *)src + 1);
index 3bdd4116a8ec578ce26c4e57247c195f1e44560d..325ec16e499a38866f6467e24812d1843a3b0483 100644 (file)
@@ -39,7 +39,7 @@ static void catia_string_replace(char *s, unsigned char oldc, unsigned
         for (;*ptr;ptr++)
                 if (*ptr==old) *ptr=newc;
 
-        pull_ucs2(NULL, s, tmpbuf, -1, sizeof(tmpbuf), STR_TERMINATE);
+        pull_ucs2(NULL, s, tmpbuf, sizeof(pstring), sizeof(tmpbuf), STR_TERMINATE);
 }
 
 static void from_unix(char *s)