From: andrew@... Date: 2017-06-02T09:26:01+00:00 Subject: [ruby-core:81522] [Ruby trunk Bug#13616] Zlib::GzipReader#pos underflows after calling #ungetbyte or #ungetc at start of file Issue #13616 has been updated by haines (Andrew Haines). File 0001-Fix-underflow-of-Zlib-GzipReader-pos.patch added Here's an attempt at a patch to check if pos will be negative and handle that scenario accordingly. ---------------------------------------- Bug #13616: Zlib::GzipReader#pos underflows after calling #ungetbyte or #ungetc at start of file https://bugs.ruby-lang.org/issues/13616#change-65229 * Author: haines (Andrew Haines) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16] * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- 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: ~~~ ruby 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-------------------------------- 0001-Fix-underflow-of-Zlib-GzipReader-pos.patch (1.73 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: