Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,15 @@ public void parse(ByteArrayInputStream input, int readSize) throws Exception {
}

currentCommand.write(b);

if (currentCommand.size() > wireFormat.getMaxFrameSize()) {
StompFrameError errorFrame = new StompFrameError(
new ProtocolException("The maximum frame size was exceeded while processing headers.", true));
errorFrame.setAction(this.action);
transport.doConsume(errorFrame);
return;
}

// end of headers section, parse action and header
if (b == '\n' && (previousByte == '\n' || currentCommand.endsWith(crlfcrlf))) {
DataByteArrayInputStream data = new DataByteArrayInputStream(currentCommand.toByteArray());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,25 +205,25 @@ public void testOversizedActionOnNioSslSocket() throws Exception {
@Test(timeout = 60000)
public void testOversizedHeadersOnPlainSocket() throws Exception {
Assume.assumeTrue(testType == TestType.FRAME_MAX_LESS_THAN_HEADER_MAX);
doTestOversizedHeaders(port, false);
doTestOversizedHeaders(port, false, false);
}

@Test(timeout = 60000)
public void testOversizedHeadersOnNioSocket() throws Exception {
Assume.assumeTrue(testType == TestType.FRAME_MAX_LESS_THAN_HEADER_MAX);
doTestOversizedHeaders(nioPort, false);
doTestOversizedHeaders(nioPort, false, true);
}

@Test(timeout = 60000)
public void testOversizedHeadersOnSslSocket() throws Exception {
Assume.assumeTrue(testType == TestType.FRAME_MAX_LESS_THAN_HEADER_MAX);
doTestOversizedHeaders(sslPort, true);
doTestOversizedHeaders(sslPort, true, false);
}

@Test(timeout = 60000)
public void testOversizedHeadersOnNioSslSocket() throws Exception {
Assume.assumeTrue(testType == TestType.FRAME_MAX_LESS_THAN_HEADER_MAX);
doTestOversizedHeaders(nioSslPort, true);
doTestOversizedHeaders(nioSslPort, true, true);
}

protected void doTestOversizedAction(int port, boolean useSsl) throws Exception {
Expand All @@ -242,7 +242,7 @@ protected void doTestOversizedAction(int port, boolean useSsl) throws Exception
assertTrue(received.getBody().contains("maximum frame size"));
}

protected void doTestOversizedHeaders(int port, boolean useSsl) throws Exception {
protected void doTestOversizedHeaders(int port, boolean useSsl, boolean nio) throws Exception {
initializeStomp(port, useSsl);

StringBuilder headers = new StringBuilder(maxFrameSize + 100);
Expand All @@ -259,6 +259,10 @@ protected void doTestOversizedHeaders(int port, boolean useSsl) throws Exception
assertNotNull(received);
assertEquals("ERROR", received.getAction());
assertTrue(received.getBody().contains("maximum frame size"));
// verify we terminated during header processing and not later during the action
if (nio) {
assertTrue(received.getBody().contains("while processing headers"));
}
}

protected void doOversizedTestMessage(int port, boolean useSsl, int dataSize) throws Exception {
Expand Down
Loading