Project

General

Profile

Actions

Bug #13616

closed

Zlib::GzipReader#pos underflows after calling #ungetbyte or #ungetc at start of file

Added by haines (Andrew Haines) about 5 years ago. Updated almost 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
[ruby-core:81488]

Description

After calling #ungetbyte or #ungetc at the start of file, Zlib::GzipReader#pos should be negative. However, the calculation uses unsigned integers, and underflow occurs.

Instead of the expected -1, the below outputs 18446744073709551615 on my machine:

require 'zlib'

gz = Zlib::GzipReader.new(StringIO.new([
  31, 139, 8, 0, 44, 220, 209, 71, 0, 3, 51, 52, 50, 54, 49, 77,
  76, 74, 78, 73, 5, 0, 157, 5, 0, 36, 10, 0, 0, 0
].pack("C*")))

gz.ungetbyte 0x21

p gz.pos

#read still returns the correct string ("!12345abcde" in this case).


Files

Actions

Also available in: Atom PDF