diff --git a/src/java/org/jivesoftware/multiplexer/net/XMLLightweightParser.java b/src/java/org/jivesoftware/multiplexer/net/XMLLightweightParser.java index 632e259..4f93056 100644 --- a/src/java/org/jivesoftware/multiplexer/net/XMLLightweightParser.java +++ b/src/java/org/jivesoftware/multiplexer/net/XMLLightweightParser.java @@ -144,8 +144,6 @@ * Main reading method */ public void read(ByteBuffer byteBuffer) throws Exception { - int readByte = byteBuffer.remaining(); - invalidateBuffer(); // Check that the buffer is not bigger than 1 Megabyte. For security reasons // we will abort parsing when 1 Mega of queued chars was found. @@ -154,8 +152,9 @@ } CharBuffer charBuffer = encoder.decode(byteBuffer.buf()); char[] buf = charBuffer.array(); + int readByte = charBuffer.remaining(); - buffer.append(buf); + buffer.append(buf, 0, readByte); // Do nothing if the buffer only contains white spaces if (buffer.charAt(0) <= ' ' && buffer.charAt(buffer.length()-1) <= ' ') { if ("".equals(buffer.toString().trim())) { diff --git a/test/org/jivesoftware/multiplexer/net/XMLLightweightParserTest.java b/test/org/jivesoftware/multiplexer/net/XMLLightweightParserTest.java index 6531ee0..ab91fd7 100644 --- a/test/org/jivesoftware/multiplexer/net/XMLLightweightParserTest.java +++ b/test/org/jivesoftware/multiplexer/net/XMLLightweightParserTest.java @@ -12,6 +12,7 @@ package org.jivesoftware.multiplexer.net; import junit.framework.TestCase; +import junit.framework.Assert; import org.apache.mina.common.ByteBuffer; import org.dom4j.Element; import org.dom4j.io.SAXReader; @@ -297,6 +298,32 @@ } } + public void testRead() { + try { + XMLLightweightParser parser = new XMLLightweightParser("UTF-8"); + String xml1 = "\u1000 1) { + Assert.fail("More than one message found"); + } + else { + Assert.assertEquals(xml1 + xml2, msgs[0]); + } + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + } + protected void setUp() throws Exception { super.setUp(); // Create parser