You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2008/07/28 18:26:00 UTC
svn commit: r680390 -
/harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/org/apache/harmony/niochar/charset/UTF_8.java
Author: tellison
Date: Mon Jul 28 09:25:59 2008
New Revision: 680390
URL: http://svn.apache.org/viewvc?rev=680390&view=rev
Log:
Fix UTF-8 decoder.
Failing test was org.apache.harmony.luni.tests.java.io.OutputStreamWriterTest#testBlockIO
Modified:
harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/org/apache/harmony/niochar/charset/UTF_8.java
Modified: harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/org/apache/harmony/niochar/charset/UTF_8.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/org/apache/harmony/niochar/charset/UTF_8.java?rev=680390&r1=680389&r2=680390&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/org/apache/harmony/niochar/charset/UTF_8.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio_char/src/main/java/org/apache/harmony/niochar/charset/UTF_8.java Mon Jul 28 09:25:59 2008
@@ -62,7 +62,7 @@
29892736 // (0111o000b << 18)+(1o000000b << 12)+(1o000000b << 6)+(1o000000b)
};
- private static final int headerBits[] = { -1, 0x1F, 0x0F, 0x07 };
+ private static final int lowerEncodingLimit[] = { -1, 0x80, 0x800, 0x10000 };
public UTF_8(String canonicalName, String[] aliases) {
super(canonicalName, aliases);
@@ -130,7 +130,7 @@
jchar = jchar & 0x7F;
int tail = remainingBytes[jchar];
- if (tail == -1 || (jchar & headerBits[tail]) == 0) {
+ if (tail == -1) {
in.position(inIndex - in.arrayOffset());
out.position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
@@ -149,8 +149,8 @@
jchar = (jchar << 6) + nextByte;
}
jchar -= remainingNumbers[tail];
- if (jchar == 0x7F) {
- // U+007F should have been encoded in a single octet
+ if (jchar < lowerEncodingLimit[tail]) {
+ // Should have been encoded in fewer octets
in.position(inIndex - in.arrayOffset());
out.position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
@@ -175,7 +175,7 @@
if (jchar < 0) {
jchar = jchar & 0x7F;
int tail = remainingBytes[jchar];
- if ((tail == -1) || (jchar & headerBits[tail]) == 0) {
+ if (tail == -1) {
return CoderResult.malformedForLength(1);
}
if (limit - pos < 1 + tail) {
@@ -192,8 +192,8 @@
jchar = (jchar << 6) + nextByte;
}
jchar -= remainingNumbers[tail];
- if (jchar == 0x7F) {
- // U+007F should have been encoded in a single octet
+ if (jchar < lowerEncodingLimit[tail]) {
+ // Should have been encoded in a fewer octets
return CoderResult.malformedForLength(1);
}
pos += tail;