summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2004-09-24 23:56:22 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:52:48 -0500
commit7b0560dcccbd44f1f7b67ba1d46f6a5680b6b47c (patch)
tree2bf90eddd88ab62a13d87c80481904723d94badb /source
parentca9516520ffe007a7dccd4d6cbf1c5d77fc4ce29 (diff)
downloadsamba-7b0560dcccbd44f1f7b67ba1d46f6a5680b6b47c.tar.gz
samba-7b0560dcccbd44f1f7b67ba1d46f6a5680b6b47c.tar.xz
samba-7b0560dcccbd44f1f7b67ba1d46f6a5680b6b47c.zip
r2610: Even if we only use the fast-path (ascii only) then
we still need to set errno = E2BIG when we overflow. Jeremy.
Diffstat (limited to 'source')
-rw-r--r--source/lib/charcnv.c21
1 files changed, 21 insertions, 0 deletions
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;
}