Package: libc6 Version: 2.2.5-11.5 Severity: normal #include <assert.h> #include <iconv.h> #include <stdio.h> #include <string.h>
void test(char *str, char *from, char *to) { char *ib, *ob; size_t ibl, obl, ret; char buf[100]; iconv_t cd; printf("\nConverting from %s to %s\n", from, to); cd = iconv_open(to, from); if (cd == (iconv_t)-1) { printf("iconv_open failed\n"); return; } ib = str; ibl = strlen(str); ob = buf; obl = sizeof(buf); ret = iconv(cd, &ib, &ibl, &ob, &obl); printf("iconv returned %d\n", ret); assert(ib + ibl == str + strlen(str)); assert(ob + obl == buf + sizeof(buf)); printf("Read %d bytes and wrote %d bytes\n", ib - str, ob - buf); iconv_close(cd); } int main() { test("v\x9cux", "windows-1258", "ISO-8859-1"); test("v\xc5\x93ux", "utf-8", "ISO-8859-1"); return 0; } /* With glibc-2.2.5 on Debian I obtained the following output: Converting from windows-1258 to ISO-8859-1 iconv returned -1 Read 2 bytes and wrote 1 bytes Converting from utf-8 to ISO-8859-1 iconv returned -1 Read 1 bytes and wrote 1 bytes When converting from windows-1258, the unconvertable character is skipped. When converting from utf-8, the unconvertable character is not skipped. */ -- System Information Debian Release: 3.0 Kernel Version: Linux dueto.rano1.org 2.4.18-1-686 #1 Mon Jan 5 19:32:08 UTC 2004 i686 unknown