diff -ur kaffe/ChangeLog kaffe-patched/ChangeLog
--- kaffe/ChangeLog	2002-11-22 02:24:30.000000000 +0100
+++ kaffe-patched/ChangeLog	2002-11-22 02:52:21.000000000 +0100
@@ -1,3 +1,10 @@
+2002-11-22  Ito Kazumitsu <ito.kazumitsu@hitachi-cable.co.jp>
+
+	* libraries/clib/native/ByteToCharIconv.c: 
+	(Java_kaffe_io_ByteToCharIconv_convert): convert the
+	begining of an invalid multibyte sequence to '?'. Fixes
+	an infinite loop on invalid multibyte sequences.
+
 2002-11-21  Dalibor Topic  <robilad@yahoo.com>
 
 	* libraries/javalib/java/io/File.java: 
diff -ur kaffe/libraries/clib/native/ByteToCharIconv.c kaffe-patched/libraries/clib/native/ByteToCharIconv.c
--- kaffe/libraries/clib/native/ByteToCharIconv.c	2002-04-16 10:06:51.000000000 +0200
+++ kaffe-patched/libraries/clib/native/ByteToCharIconv.c	2002-11-22 02:42:57.000000000 +0100
@@ -21,6 +21,8 @@
 #include <iconv.h>
 #endif
 
+#include <errno.h>
+
 static jfieldID cd_id;
 static jmethodID carry_id;
 
@@ -89,6 +91,16 @@
     icv_out = buffer;
 #endif
     ret = iconv (cd, &icv_in, &icv_inlen, &icv_out, &icv_outlen);
+    if (ret < 0) {
+	/* convert the begining of an invalid  multibyte  sequence to '?' */
+	if (errno == EILSEQ) {
+		icv_in++;
+		icv_inlen--;
+		*(icv_out++) = 0;
+		*(icv_out++) = '?';
+		icv_outlen -= 2;
+	}
+    }
 #ifndef WORDS_BIGENDIAN
     swab (buffer, jc + toPos, toLen * 2 - icv_outlen);
     KFREE (buffer);
