From 2b84fc2b70df7767ee9a279fffab5db1b3c8023e Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 20 Sep 2010 22:42:17 -0700 Subject: [PATCH] i18n: Handle EINVAL more gracefully. EINVAL indicates an invalid multibyte sequence at the end of buffer. It seems to me that there is no point in swallowing up a single byte and going on at that point; instead, one might as well just declare the conversion done after adding the fallback character. This is what this commit does. --- src/libpspp/i18n.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/libpspp/i18n.c b/src/libpspp/i18n.c index d9b42cbcca..60dc693db6 100644 --- a/src/libpspp/i18n.c +++ b/src/libpspp/i18n.c @@ -118,11 +118,16 @@ try_recode (iconv_t conv, &op, &outbytes) == -1) switch (errno) { - case EILSEQ: case EINVAL: - if (outbytes == 0) + if (outbytes < 2) return false; + *op++ = fallbackchar; + *op++ = '\0'; + return true; + case EILSEQ: + if (outbytes == 0) + return false; *op++ = fallbackchar; outbytes--; ip++; -- 2.30.2