@@ -284,36 +284,39 @@ public void completed(Long result, Void attachment) {
284284 readUnknownFrame (streamId , frameTypeId , flags , payloadSize , payload );
285285 }
286286 }
287- // See if there is a new 9 byte header and continue parsing if possible
288- if (payload .remaining () >= 9 ) {
289- int position = payload .position ();
290- payloadSize = ByteUtil .getThreeBytes (payload , position );
291- frameTypeId = ByteUtil .getOneByte (payload , position + 3 );
292- frameType = FrameType .valueOf (frameTypeId );
293- flags = ByteUtil .getOneByte (payload , position + 4 );
294- streamId = ByteUtil .get31Bits (payload , position + 5 );
295- streamException = false ;
296- if (payload .remaining () - 9 >= payloadSize ) {
297- continueParsing = true ;
298- // Now go over frame header
299- payload .position (payload .position () + 9 );
300- try {
301- validateFrame (null , frameType , streamId , flags , payloadSize );
302- } catch (StreamException e ) {
303- error = e ;
304- streamException = true ;
305- } catch (Http2Exception e ) {
306- error = e ;
307- continueParsing = false ;
287+ if (!upgradeHandler .isOverheadLimitExceeded ()) {
288+ // See if there is a new 9 byte header and continue parsing if possible
289+ if (payload .remaining () >= 9 ) {
290+ int position = payload .position ();
291+ payloadSize = ByteUtil .getThreeBytes (payload , position );
292+ frameTypeId = ByteUtil .getOneByte (payload , position + 3 );
293+ frameType = FrameType .valueOf (frameTypeId );
294+ flags = ByteUtil .getOneByte (payload , position + 4 );
295+ streamId = ByteUtil .get31Bits (payload , position + 5 );
296+ streamException = false ;
297+ if (payload .remaining () - 9 >= payloadSize ) {
298+ continueParsing = true ;
299+ // Now go over frame header
300+ payload .position (payload .position () + 9 );
301+ try {
302+ validateFrame (null , frameType , streamId , flags , payloadSize );
303+ } catch (StreamException e ) {
304+ error = e ;
305+ streamException = true ;
306+ } catch (Http2Exception e ) {
307+ error = e ;
308+ continueParsing = false ;
309+ }
308310 }
309311 }
310312 }
311313 } while (continueParsing );
312314 } catch (RuntimeException | IOException | Http2Exception e ) {
313315 error = e ;
314- }
315- if (payload .hasRemaining ()) {
316- socketWrapper .unRead (payload );
316+ } finally {
317+ if (payload .hasRemaining ()) {
318+ socketWrapper .unRead (payload );
319+ }
317320 }
318321 }
319322 if (state == CompletionState .DONE ) {
0 commit comments