lib/http/2/framer.rb in http-2-0.8.2 vs lib/http/2/framer.rb in http-2-0.8.3

- old
+ new

@@ -1,8 +1,9 @@ module HTTP2 # Performs encoding, decoding, and validation of binary HTTP/2 frames. # + # rubocop:disable ClassLength class Framer include Error # Default value of max frame size (16384 bytes) DEFAULT_MAX_FRAME_SIZE = 2**14 @@ -213,11 +214,11 @@ when :rst_stream bytes << pack_error(frame[:error]) length += 4 when :settings - if frame[:stream] != 0 + if (frame[:stream]).nonzero? fail CompressionError, "Invalid stream ID (#{frame[:stream]})" end frame[:payload].each do |(k, v)| if k.is_a? Integer @@ -266,19 +267,21 @@ when :altsvc bytes << [frame[:max_age], frame[:port]].pack(UINT32 + UINT16) length += 6 if frame[:proto] fail CompressionError, 'Proto too long' if frame[:proto].bytesize > 255 - bytes << [frame[:proto].bytesize].pack(UINT8) << frame[:proto].force_encoding(Encoding::BINARY) + bytes << [frame[:proto].bytesize].pack(UINT8) + bytes << frame[:proto].force_encoding(Encoding::BINARY) length += 1 + frame[:proto].bytesize else bytes << [0].pack(UINT8) length += 1 end if frame[:host] fail CompressionError, 'Host too long' if frame[:host].bytesize > 255 - bytes << [frame[:host].bytesize].pack(UINT8) << frame[:host].force_encoding(Encoding::BINARY) + bytes << [frame[:host].bytesize].pack(UINT8) + bytes << frame[:host].force_encoding(Encoding::BINARY) length += 1 + frame[:host].bytesize else bytes << [0].pack(UINT8) length += 1 end @@ -323,10 +326,12 @@ def parse(buf) return nil if buf.size < 9 frame = read_common_header(buf) return nil if buf.size < 9 + frame[:length] + fail ProtocolError, 'payload too large' if frame[:length] > DEFAULT_MAX_FRAME_SIZE + buf.read(9) payload = buf.read(frame[:length]) # Implementations MUST discard frames # that have unknown or unsupported types. @@ -352,30 +357,30 @@ frame[:payload] = payload.read(frame[:length]) when :headers if frame[:flags].include? :priority e_sd = payload.read_uint32 frame[:stream_dependency] = e_sd & RBIT - frame[:exclusive] = (e_sd & EBIT) != 0 + frame[:exclusive] = (e_sd & EBIT) != 0 # rubocop:disable Style/NumericPredicate frame[:weight] = payload.getbyte + 1 end frame[:payload] = payload.read(frame[:length]) when :priority e_sd = payload.read_uint32 frame[:stream_dependency] = e_sd & RBIT - frame[:exclusive] = (e_sd & EBIT) != 0 + frame[:exclusive] = (e_sd & EBIT) != 0 # rubocop:disable Style/NumericPredicate frame[:weight] = payload.getbyte + 1 when :rst_stream frame[:error] = unpack_error payload.read_uint32 when :settings # NOTE: frame[:length] might not match the number of frame[:payload] # because unknown extensions are ignored. frame[:payload] = [] - unless frame[:length] % 6 == 0 + unless (frame[:length] % 6).zero? fail ProtocolError, 'Invalid settings payload length' end - if frame[:stream] != 0 + if (frame[:stream]).nonzero? fail ProtocolError, "Invalid stream ID (#{frame[:stream]})" end (frame[:length] / 6).times do id = payload.read(2).unpack(UINT16).first