2012/12/25 <[email protected]>:
> Author: markt
> Date: Mon Dec 24 21:07:01 2012
> New Revision: 1425680
>
> URL: http://svn.apache.org/viewvc?rev=1425680&view=rev
> Log:
> Text messages are always UTF8
> (Note that even with this fix Autobahn identifies a lot of UTF-8 handling
> issues. The quick and dirty new String() approach needs a more robust
> replacement.)
>
> Modified:
> tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
>
> Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
> URL:
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java?rev=1425680&r1=1425679&r2=1425680&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java (original)
> +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java Mon Dec 24
> 21:07:01 2012
> @@ -18,6 +18,7 @@ package org.apache.tomcat.websocket;
>
> import java.io.EOFException;
> import java.io.IOException;
> +import java.io.UnsupportedEncodingException;
> import java.nio.ByteBuffer;
>
> import javax.servlet.ServletInputStream;
> @@ -282,8 +283,13 @@ public class WsFrame {
> @SuppressWarnings("unchecked")
> private void sendMessage(boolean last) {
> if (textMessage) {
> - String payload =
> - new String(messageBuffer.array(), 0,
> messageBuffer.limit());
> + String payload = null;
> + try {
> + payload = new String(messageBuffer.array(), 0,
> + messageBuffer.limit(), "UTF8");
> + } catch (UnsupportedEncodingException e) {
> + // All JVMs must support UTF8
> + }
> MessageHandler mh = wsSession.getTextMessageHandler();
> if (mh != null) {
> if (mh instanceof MessageHandler.Async<?>) {
>
Looking at the current code, "new String()" call still remains in WsFrame.java
Starting with Line 270:
if (controlBufferBinary.remaining() > 0) {
CoderResult cr = utf8DecoderControl.decode(
controlBufferBinary, controlBufferText, true);
if (cr.isError()) {
controlBufferBinary.clear();
controlBufferText.clear();
throw new WsIOException(new CloseReason(
CloseCodes.PROTOCOL_ERROR,
sm.getString("wsFrame.invalidUtf8Close")));
}
reason = new String(controlBufferBinary.array(),
controlBufferBinary.arrayOffset() +
controlBufferBinary.position(),
controlBufferBinary.remaining(), "UTF8");
}
Why use "new String(.., UTF8)" when there is
"utf8DecoderControl.decode(..)" call several lines above?
Isn't it supposed to use controlBufferText here ?
Best regards,
Konstantin Kolinko
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]