Author: markt Date: Sun Mar 26 17:06:19 2017 New Revision: 1788753 URL: http://svn.apache.org/viewvc?rev=1788753&view=rev Log: Should be tracking max *active* stream ID Found with the h2spec tool written by Moto Ishizawa.
Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1788753&r1=1788752&r2=1788753&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Sun Mar 26 17:06:19 2017 @@ -130,7 +130,6 @@ class Http2UpgradeHandler extends Abstra private final Map<Integer,Stream> streams = new HashMap<>(); protected final AtomicInteger activeRemoteStreamCount = new AtomicInteger(0); - private volatile int maxRemoteStreamId = 0; // Start at -1 so the 'add 2' logic in closeIdleStreams() works private volatile int maxActiveRemoteStreamId = -1; private volatile int maxProcessedStreamId; @@ -170,7 +169,6 @@ class Http2UpgradeHandler extends Abstra Integer key = Integer.valueOf(1); Stream stream = new Stream(key, this, coyoteRequest); streams.put(key, stream); - maxRemoteStreamId = 1; maxActiveRemoteStreamId = 1; activeRemoteStreamCount.set(1); maxProcessedStreamId = 1; @@ -957,16 +955,10 @@ class Http2UpgradeHandler extends Abstra sm.getString("upgradeHandler.stream.even", key), Http2Error.PROTOCOL_ERROR); } - if (streamId <= maxRemoteStreamId) { - throw new ConnectionException(sm.getString("upgradeHandler.stream.old", key, - Integer.valueOf(maxRemoteStreamId)), Http2Error.PROTOCOL_ERROR); - } - pruneClosedStreams(); Stream result = new Stream(key, this); streams.put(key, result); - maxRemoteStreamId = streamId; return result; } @@ -978,7 +970,6 @@ class Http2UpgradeHandler extends Abstra Stream result = new Stream(key, this, request); streams.put(key, result); - maxRemoteStreamId = streamId; return result; } @@ -1367,6 +1358,11 @@ class Http2UpgradeHandler extends Abstra if (stream == null) { stream = createRemoteStream(streamId); } + if (streamId < maxActiveRemoteStreamId) { + throw new ConnectionException(sm.getString("upgradeHandler.stream.old", + Integer.valueOf(streamId), Integer.valueOf(maxActiveRemoteStreamId)), + Http2Error.PROTOCOL_ERROR); + } stream.checkState(FrameType.HEADERS); stream.receivedStartOfHeaders(headersEndStream); closeIdleStreams(streamId); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org