the conversion from int to size_t in charcnv did not take into account
authorAndrew Tridgell <tridge@samba.org>
Mon, 2 Feb 2004 12:02:43 +0000 (12:02 +0000)
committerAndrew Tridgell <tridge@samba.org>
Mon, 2 Feb 2004 12:02:43 +0000 (12:02 +0000)
one place where we checked "if (src_len > 0)".

I actually would greatly prefer to switch back to int for src_len. The
type *can* be negative, which means an unsigned type is
inappropriate. There is absolutely no reason why "int" should not be
used for a parameter like this.

I didn't change back to int as we are close to a release and I wanted
a mininal change, but please don't go changing types like this in
future without very careful testing and a damn good reason.

this bug broke pull_ucs2(), I would not be surprised if it caused all
sorts of nastiness. Thanks to vl for noticing the symptoms!
(This used to be commit 8b8f0c527959c707f274b435fc59156e37232981)

source3/lib/charcnv.c

index 5f9392b62019a45560c27e1cd7c2130544d9bbc8..aed1b79a8e65960296a60c5b4d26f2125907ff8d 100644 (file)
@@ -921,7 +921,7 @@ size_t pull_ucs2(const void *base_ptr, char *dest, const void *src, size_t dest_
 
        if (ucs2_align(base_ptr, src, flags)) {
                src = (const void *)((const char *)src + 1);
-               if (src_len > 0)
+               if (src_len != (size_t)-1)
                        src_len--;
        }