From: nagachika00@... Date: 2017-09-10T02:40:50+00:00 Subject: [ruby-core:82728] [Ruby trunk Bug#13616] Zlib::GzipReader#pos underflows after calling #ungetbyte or #ungetc at start of file Issue #13616 has been updated by nagachika (Tomoyuki Chikanaga). Backport changed from 2.2: REQUIRED, 2.3: DONE, 2.4: REQUIRED to 2.2: REQUIRED, 2.3: DONE, 2.4: DONE ruby_2_4 r59807 merged revision(s) 58524,58525,58526,59333,59337. ---------------------------------------- Bug #13616: Zlib::GzipReader#pos underflows after calling #ungetbyte or #ungetc at start of file https://bugs.ruby-lang.org/issues/13616#change-66569 * Author: haines (Andrew Haines) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16] * Backport: 2.2: REQUIRED, 2.3: DONE, 2.4: DONE ---------------------------------------- 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: