Buggy code:
public final class Decoder { private static final IOException DECOMPRESSION_EXCEPTION = new IOException ( "decompression<seq2seq4repair_space>failure" ) ; private static final IOException ILLEGAL_INDEX_VALUE = new IOException ( "illegal<seq2seq4repair_space>index<seq2seq4repair_space>value" ) ; private static final IOException ILLEGAL_ENCODING_CONTEXT_UPDATE = new IOException ( "illegal<seq2seq4repair_space>encoding<seq2seq4repair_space>context<seq2seq4repair_space>update" ) ; private static final IOException INVALID_MAX_HEADER_TABLE_SIZE = new IOException ( "invalid<seq2seq4repair_space>max<seq2seq4repair_space>header<seq2seq4repair_space>table<seq2seq4repair_space>size" ) ; private static final IOException MAX_HEADER_TABLE_SIZE_CHANGE_REQUIRED = new IOException ( "max<seq2seq4repair_space>header<seq2seq4repair_space>table<seq2seq4repair_space>size<seq2seq4repair_space>change<seq2seq4repair_space>required" ) ; private static final byte [ ] EMPTY = new byte [ ] { } ; private final HeaderTable headerTable ; private int maxHeaderSize ; private int maxHeaderTableSize ; private int encoderMaxHeaderTableSize ; private boolean maxHeaderTableSizeChangeRequired ; private long headerSize ; private Decoder . State state ; private IndexType indexType ; private int index ; private boolean huffmanEncoded ; private int skipLength ; private int nameLength ; private int valueLength ; private byte [ ] name ; private enum State { READ_HEADER_REPRESENTATION , READ_MAX_HEADER_TABLE_SIZE , READ_INDEXED_HEADER , READ_INDEXED_HEADER_NAME , READ_LITERAL_HEADER_NAME_LENGTH_PREFIX , READ_LITERAL_HEADER_NAME_LENGTH , READ_LITERAL_HEADER_NAME , SKIP_LITERAL_HEADER_NAME , READ_LITERAL_HEADER_VALUE_LENGTH_PREFIX , READ_LITERAL_HEADER_VALUE_LENGTH , READ_LITERAL_HEADER_VALUE , SKIP_LITERAL_HEADER_VALUE ; } public Decoder ( int maxHeaderSize , int maxHeaderTableSize ) { } private void reset ( ) { } public void decode ( InputStream in , HeaderListener headerListener ) throws IOException { while ( ( in . available ( ) ) > 0 ) { switch ( state ) { case READ_HEADER_REPRESENTATION : byte b = ( ( byte ) ( in . read ( ) ) ) ; <START_BUG> if ( ( maxHeaderTableSizeChangeRequired ) && ( ( b & 240 ) != 32 ) ) { <END_BUG> throw Decoder . MAX_HEADER_TABLE_SIZE_CHANGE_REQUIRED ; } if ( b < 0 ) { index = b & 127 ; if ( ( index ) == 0 ) { throw Decoder . ILLEGAL_INDEX_VALUE ; } else if ( ( index ) == 127 ) { state = Decoder . State . READ_INDEXED_HEADER ; } else { indexHeader ( index , headerListener ) ; } } else if ( ( b & 64 ) == 64 ) { indexType = IndexType . INCREMENTAL ; index = b & 63 ; if ( ( index ) == 0 ) { state = Decoder . State . READ_LITERAL_HEADER_NAME_LENGTH_PREFIX ; } else if ( ( index ) == 63 ) { state = Decoder . State . READ_INDEXED_HEADER_NAME ; } else { readName ( index ) ; state = Decoder . State . READ_LITERAL_HEADER_VALUE_LENGTH_PREFIX ; } } else if ( ( b & 32 ) == 32 ) { index = b & 31 ; if ( ( index ) == 31 ) { state = Decoder . State . READ_MAX_HEADER_TABLE_SIZE ; } else { setHeaderTableSize ( index ) ; state = Decoder . State . READ_HEADER_REPRESENTATION ; } } else { indexType = ( ( b & 16 ) == 16 ) ? IndexType . NEVER : IndexType . NONE ; index = b & 15 ; if ( ( index ) == 0 ) { state = Decoder . State . READ_LITERAL_HEADER_NAME_LENGTH_PREFIX ; } else if ( ( index ) == 15 ) { state = Decoder . State . READ_INDEXED_HEADER_NAME ; } else { readName ( index ) ; state = Decoder . State . READ_LITERAL_HEADER_VALUE_LENGTH_PREFIX ; } } break ; case READ_MAX_HEADER_TABLE_SIZE : int headerTableSize = Decoder . decodeULE128 ( in ) ; if ( headerTableSize == ( - 1 ) ) { return ; } if ( headerTableSize > ( ( Integer . MAX_VALUE ) - ( index ) ) ) { throw Decoder . DECOMPRESSION_EXCEPTION ; } setHeaderTableSize ( ( ( index ) + headerTableSize ) ) ; state = Decoder . State . READ_HEADER_REPRESENTATION ; break ; case READ_INDEXED_HEADER : int headerIndex = Decoder . decodeULE128 ( in ) ; if ( headerIndex == ( - 1 ) ) { return ; } if ( headerIndex > ( ( Integer . MAX_VALUE ) - ( index ) ) ) { throw Decoder . DECOMPRESSION_EXCEPTION ; } indexHeader ( ( ( index ) + headerIndex ) , headerListener ) ; state = Decoder . State . READ_HEADER_REPRESENTATION ; break ; case READ_INDEXED_HEADER_NAME : int nameIndex = Decoder . decodeULE128 ( in ) ; if ( nameIndex == ( - 1 ) ) { return ; } if ( nameIndex > ( ( Integer . MAX_VALUE ) - ( index ) ) ) { throw Decoder . DECOMPRESSION_EXCEPTION ; } readName ( ( ( index ) + nameIndex ) ) ; state = Decoder . State . READ_LITERAL_HEADER_VALUE_LENGTH_PREFIX ; break ; case READ_LITERAL_HEADER_NAME_LENGTH_PREFIX : b = ( ( byte ) ( in . read ( ) ) ) ; huffmanEncoded = ( b & 128 ) == 128 ; index = b & 127 ; if ( ( index ) == 127 ) { state = Decoder . State . READ_LITERAL_HEADER_NAME_LENGTH ; } else { nameLength = index ; if ( ( nameLength ) == 0 ) { throw Decoder . DECOMPRESSION_EXCEPTION ; } if ( exceedsMaxHeaderSize ( nameLength ) ) { if ( ( indexType ) == ( IndexType . NONE ) ) { name = Decoder . EMPTY ; skipLength = nameLength ; state = Decoder . State . SKIP_LITERAL_HEADER_NAME ; break ; } if ( ( ( nameLength ) + ( HeaderField . HEADER_ENTRY_OVERHEAD ) ) > ( headerTable . capacity ( ) ) ) { headerTable . clear ( ) ; name = Decoder . EMPTY ; skipLength = nameLength ; state = Decoder . State . SKIP_LITERAL_HEADER_NAME ; break ; } } state = Decoder . State . READ_LITERAL_HEADER_NAME ; } break ; case READ_LITERAL_HEADER_NAME_LENGTH : nameLength = Decoder . decodeULE128 ( in ) ; if ( ( nameLength ) == ( - 1 ) ) { return ; } if ( ( nameLength ) > ( ( Integer . MAX_VALUE ) - ( index ) ) ) { throw Decoder . DECOMPRESSION_EXCEPTION ; } nameLength += index ;

Fix:
if ( ( maxHeaderTableSizeChangeRequired ) && ( ( b & 224 ) != 32 ) ) {