Author: remm Date: Mon Dec 1 17:57:30 2014 New Revision: 1642723 URL: http://svn.apache.org/r1642723 Log: Enforce ping/pong size limit. Relax exception handling (it seems all encode exceptions should be caught and processed through onError).
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties?rev=1642723&r1=1642722&r2=1642723&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties Mon Dec 1 17:57:30 2014 @@ -76,6 +76,7 @@ wsRemoteEndpoint.noEncoder=No encoder sp wsRemoteEndpoint.wrongState=The remote endpoint was in state [{0}] which is an invalid state for called method wsRemoteEndpoint.nullData=Invalid null data argument wsRemoteEndpoint.nullHandler=Invalid null handler argument +wsRemoteEndpoint.tooMuchData=Ping or pong may not send more than 125 bytes # Note the following message is used as a close reason in a WebSocket control # frame and therefore must be 123 bytes (not characters) or less in length. Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java?rev=1642723&r1=1642722&r2=1642723&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java Mon Dec 1 17:57:30 2014 @@ -168,6 +168,9 @@ public abstract class WsRemoteEndpointIm @Override public void sendPing(ByteBuffer applicationData) throws IOException, IllegalArgumentException { + if (applicationData.remaining() > 125) { + throw new IllegalArgumentException(sm.getString("wsRemoteEndpoint.tooMuchData")); + } startMessageBlock(Constants.OPCODE_PING, applicationData, true); } @@ -175,6 +178,9 @@ public abstract class WsRemoteEndpointIm @Override public void sendPong(ByteBuffer applicationData) throws IOException, IllegalArgumentException { + if (applicationData.remaining() > 125) { + throw new IllegalArgumentException(sm.getString("wsRemoteEndpoint.tooMuchData")); + } startMessageBlock(Constants.OPCODE_PONG, applicationData, true); } @@ -582,7 +588,7 @@ public abstract class WsRemoteEndpointIm throw new EncodeException(obj, sm.getString( "wsRemoteEndpoint.noEncoder", obj.getClass())); } - } catch (EncodeException | IOException e) { + } catch (Exception e) { SendResult sr = new SendResult(e); completion.onResult(sr); } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java?rev=1642723&r1=1642722&r2=1642723&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java Mon Dec 1 17:57:30 2014 @@ -116,7 +116,7 @@ public abstract class PojoMessageHandler if (t instanceof RuntimeException) { throw (RuntimeException) t; } else { - throw new RuntimeException(t); + throw new RuntimeException(t.getMessage(), t); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org