diff options
-rw-r--r-- | utfconverter.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/utfconverter.c b/utfconverter.c index e031cba..34c7fe0 100644 --- a/utfconverter.c +++ b/utfconverter.c @@ -201,10 +201,10 @@ utf32_encode(struct converter *conv, if (!inbuf) return UNICONV_SUCCESS; - if (inleft * 4 > outleft) - return UNICONV_E2BIG; - while (inleft) { + if (outleft < 4) + return UNICONV_E2BIG; + if (uc->little_endian) { (*outbuf)[0] = ((**inbuf) & 0x000000ff) >> 0; (*outbuf)[1] = ((**inbuf) & 0x0000ff00) >> 8; @@ -237,10 +237,11 @@ utf32_decode(struct converter *conv, if (inleft & 3) return UNICONV_EINVAL; - if (inleft / 4 > outleft) - return UNICONV_E2BIG; while (inleft) { + if (!outleft) + return UNICONV_E2BIG; + if (uc->little_endian) **outbuf = ((*inbuf)[0] << 0) | |