[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[cp-patches] Patch: FYI: partial patch for PR 23008
From: |
Tom Tromey |
Subject: |
[cp-patches] Patch: FYI: partial patch for PR 23008 |
Date: |
11 Aug 2005 17:46:34 -0600 |
I'm checking this in.
This is the obviously correct part of PR classpath/23008.
Namely, we needed some masking to avoid sign extension bugs when
converting UTF-16 characters.
Tom
Index: ChangeLog
from Tom Tromey <address@hidden>
For PR classpath/23008:
* gnu/java/nio/charset/UTF_16Decoder.java (decodeLoop): Correctly
mask bytes when constructing characters.
Index: gnu/java/nio/charset/UTF_16Decoder.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/nio/charset/UTF_16Decoder.java,v
retrieving revision 1.5
diff -u -r1.5 UTF_16Decoder.java
--- gnu/java/nio/charset/UTF_16Decoder.java 2 Jul 2005 20:32:13 -0000 1.5
+++ gnu/java/nio/charset/UTF_16Decoder.java 11 Aug 2005 23:48:48 -0000
@@ -1,5 +1,5 @@
/* UTF_16Decoder.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -105,8 +105,9 @@
}
// FIXME: Change so you only do a single comparison here.
- char c = byteOrder == BIG_ENDIAN ? (char) ((b1 << 8) | b2)
- : (char) ((b2 << 8) | b1);
+ char c = (byteOrder == BIG_ENDIAN
+ ? (char) (((b1 & 0xFF) << 8) | (b2 & 0xFF))
+ : (char) (((b2 & 0xFF) << 8) | (b1 & 0xFF)));
if (0xD800 <= c && c <= 0xDFFF)
{
@@ -119,8 +120,9 @@
return CoderResult.UNDERFLOW;
byte b3 = in.get ();
byte b4 = in.get ();
- char d = byteOrder == BIG_ENDIAN ? (char) ((b3 << 8) | b4)
- : (char) ((b4 << 8) | b3);
+ char d = (byteOrder == BIG_ENDIAN
+ ? (char) (((b3 & 0xFF) << 8) | (b4 & 0xFF))
+ : (char) (((b4 & 0xFF) << 8) | (b3 & 0xFF)));
// make sure d is a low surrogate
if (d < 0xDC00 || d > 0xDFFF)
return CoderResult.malformedForLength (2);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [cp-patches] Patch: FYI: partial patch for PR 23008,
Tom Tromey <=