on master help sign in
accepting odd-id streams for priority, rst stream and window update.
commitc0adca455672529bb7bad875a2565285b8648c0c authorKazu Yamamoto <kazu@iij.ad.jp> dateThu 30 Jun 2016, 11:40 (10 years ago) parentdda63bc
1 file changed+5−3
warp/Network/Wai/Handler/Warp/HTTP2/Receiver.hs+5−3
warp/Network/Wai/Handler/Warp/HTTP2/Receiver.hs+5−3
@@ -64,8 +64,10 @@ frameReceiver ctx mkreq recvN = loop 0 `E.catch` sendGoaway
6464 cont <- processStreamGuardingError $ decodeFrameHeader hd
6565 when cont $ loop (n + 1)
6666
67− processStreamGuardingError (_, FrameHeader{streamId})
68− | isResponse streamId = E.throwIO $ ConnectionError ProtocolError "stream id should be odd"
67+ processStreamGuardingError (fid, FrameHeader{streamId})
68+ | isResponse streamId &&
69+ (fid `notElem` [FramePriority,FrameRSTStream,FrameWindowUpdate]) =
70+ E.throwIO $ ConnectionError ProtocolError "stream id should be odd"
6971 processStreamGuardingError (FrameUnknown _, FrameHeader{payloadLength}) = do
7072 mx <- readIORef continued
7173 case mx of
@@ -155,7 +157,7 @@ frameReceiver ctx mkreq recvN = loop 0 `E.catch` sendGoaway
155157 when (ftyp `notElem` [FrameHeaders,FramePriority]) $
156158 E.throwIO $ ConnectionError ProtocolError "this frame is not allowed in an idel stream"
157159 csid <- readIORef clientStreamId
158− when (streamId <= csid) $
160+ when (isRequest streamId && streamId <= csid) $
159161 E.throwIO $ ConnectionError ProtocolError "stream identifier must not decrease"
160162 when (ftyp == FrameHeaders) $ do
161163 writeIORef clientStreamId streamId