diff options
author | aefimov <none@none> | 2015-06-10 16:47:37 +0300 |
---|---|---|
committer | aefimov <none@none> | 2015-06-10 16:47:37 +0300 |
commit | 82f96bc5ceb738205a5a45cd7699692ead0c1406 (patch) | |
tree | c58eb2a7596dd2ff99298db7fecb406781788a0a /src | |
parent | d4afe33bb7042f748e082ca436d6dd1586f6bb49 (diff) | |
download | jdk8u_jaxp-82f96bc5ceb738205a5a45cd7699692ead0c1406.tar.gz |
7156085: ArrayIndexOutOfBoundsException throws in UTF8Reader of SAXParser
Summary: improve support for supplementary characters
Reviewed-by: joehw
Diffstat (limited to 'src')
-rw-r--r-- | src/com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.java | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.java b/src/com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.java index df9620a..4624205 100644 --- a/src/com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.java +++ b/src/com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.java @@ -529,6 +529,16 @@ public class UTF8Reader invalidByte(4, 4, b2); } + // check if output buffer is large enough to hold 2 surrogate chars + if (out + 1 >= ch.length) { + fBuffer[0] = (byte)b0; + fBuffer[1] = (byte)b1; + fBuffer[2] = (byte)b2; + fBuffer[3] = (byte)b3; + fOffset = 4; + return out - offset; + } + // decode bytes into surrogate characters int uuuuu = ((b0 << 2) & 0x001C) | ((b1 >> 4) & 0x0003); if (uuuuu > 0x10) { |