From: Jeremy Allison Date: Fri, 24 Sep 2004 23:56:22 +0000 (+0000) Subject: r2610: Even if we only use the fast-path (ascii only) then X-Git-Tag: samba-misc-tags/initial-v3-0-unstable~5759 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7b0560dcccbd44f1f7b67ba1d46f6a5680b6b47c;p=thirdparty%2Fsamba.git r2610: Even if we only use the fast-path (ascii only) then we still need to set errno = E2BIG when we overflow. Jeremy. --- diff --git a/source/lib/charcnv.c b/source/lib/charcnv.c index 40004826b4a..0fe1f15ed5d 100644 --- a/source/lib/charcnv.c +++ b/source/lib/charcnv.c @@ -394,6 +394,13 @@ size_t convert_string(charset_t from, charset_t to, #endif } } + if (!dlen) { + /* Even if we fast path we should note if we ran out of room. */ + if (((slen != (size_t)-1) && slen) || + ((slen == (size_t)-1) && lastp)) { + errno = E2BIG; + } + } return retval; } else if (from == CH_UCS2 && to != CH_UCS2) { const unsigned char *p = (const unsigned char *)src; @@ -423,6 +430,13 @@ size_t convert_string(charset_t from, charset_t to, #endif } } + if (!dlen) { + /* Even if we fast path we should note if we ran out of room. */ + if (((slen != (size_t)-1) && slen) || + ((slen == (size_t)-1) && lastp)) { + errno = E2BIG; + } + } return retval; } else if (from != CH_UCS2 && to == CH_UCS2) { const unsigned char *p = (const unsigned char *)src; @@ -452,6 +466,13 @@ size_t convert_string(charset_t from, charset_t to, #endif } } + if (!dlen) { + /* Even if we fast path we should note if we ran out of room. */ + if (((slen != (size_t)-1) && slen) || + ((slen == (size_t)-1) && lastp)) { + errno = E2BIG; + } + } return retval; }