Hi,
the attached patch fixes the way ByteDecodeLoopHelper and
ByteEncodeLoopHelper deal with the situation of unmappable characters:
With the attached patch the method really returns with a CoderResult
indicating unmappable characters. The former variant overwrote the
return value with either CoderResult.UNDERFLOW or CoderResult.OVERFLOW.

I found and debugged this problem while using mysql connector/j.

Regards
Robert

ChangeLog:

2008-09-04  Robert Schuster  <[EMAIL PROTECTED]>

    * gnu/java/nio/charset/ByteDecodeLoopHelper:
    (arrayDecodeLoop): Added new break label, escape to that label.
    * gnu/java/nio/charset/ByteEncodeLoopHelper:
    (arrayDecodeLoop): Added new break label, escape to that label.

Index: gnu/java/nio/charset/ByteDecodeLoopHelper.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/nio/charset/ByteDecodeLoopHelper.java,v
retrieving revision 1.1
diff -u -r1.1 ByteDecodeLoopHelper.java
--- gnu/java/nio/charset/ByteDecodeLoopHelper.java	23 Nov 2007 16:11:17 -0000	1.1
+++ gnu/java/nio/charset/ByteDecodeLoopHelper.java	3 Sep 2008 23:11:29 -0000
@@ -119,6 +119,8 @@
     int inRemaining = in.remaining();
     int outRemaining = out.remaining();
     CoderResult result;
+
+	bailOut:
     if (inRemaining <= outRemaining)
       {
         for (int i = 0; i < inRemaining; i++)
@@ -129,7 +131,7 @@
               {
                 inPos--;
                 result = CoderResult.unmappableForLength(1);
-                break;
+				break bailOut;
               }
             char c = mapToChar(b);
             outArray[outPos] = c;
@@ -147,7 +149,7 @@
               {
                 inPos--;
                 result = CoderResult.unmappableForLength(1);
-                break;
+				break bailOut;
               }
             char c = mapToChar(b);
             outArray[outPos] = c;
Index: gnu/java/nio/charset/ByteEncodeLoopHelper.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/nio/charset/ByteEncodeLoopHelper.java,v
retrieving revision 1.1
diff -u -r1.1 ByteEncodeLoopHelper.java
--- gnu/java/nio/charset/ByteEncodeLoopHelper.java	23 Nov 2007 16:11:17 -0000	1.1
+++ gnu/java/nio/charset/ByteEncodeLoopHelper.java	3 Sep 2008 23:11:29 -0000
@@ -120,6 +120,8 @@
     int inRemaining = in.remaining();
     int outRemaining = out.remaining();
     CoderResult result;
+
+	bailOut:
     if (inRemaining <= outRemaining)
       {
         for (int i = 0; i < inRemaining; i++)
@@ -130,7 +132,7 @@
               {
                 inPos--;
                 result = CoderResult.unmappableForLength(1);
-                break;
+                break bailOut;
               }
             byte b = mapToByte(inChar);
             outArray[outPos] = b;
@@ -148,7 +150,7 @@
               {
                 inPos--;
                 result = CoderResult.unmappableForLength(1);
-                break;
+                break bailOut;
               }
             byte b = mapToByte(inChar);
             outArray[outPos] = b;

Reply via email to