Bug #13616 ยป 0001-Fix-underflow-of-Zlib-GzipReader-pos.patch
ext/zlib/zlib.c | ||
---|---|---|
rb_gzfile_total_out(VALUE obj)
|
||
{
|
||
struct gzfile *gz = get_gzfile(obj);
|
||
return rb_uint2inum(gz->z.stream.total_out - ZSTREAM_BUF_FILLED(&gz->z));
|
||
uLong total_out = gz->z.stream.total_out;
|
||
long buf_filled = ZSTREAM_BUF_FILLED(&gz->z);
|
||
if (total_out >= (uLong)buf_filled) {
|
||
return rb_uint2inum(total_out - buf_filled);
|
||
} else {
|
||
return LONG2FIX(-(buf_filled - total_out));
|
||
}
|
||
}
|
||
/*
|
||
... | ... | |
* Raised when the data length recorded in the gzip file footer is not equivalent
|
||
* to the length of the actual uncompressed data.
|
||
*/
|
||
test/zlib/test_zlib.rb | ||
---|---|---|
}
|
||
end
|
||
def test_ungetc_at_start_of_file
|
||
s = "".dup
|
||
w = Zlib::GzipWriter.new(StringIO.new(s))
|
||
w << "abc"
|
||
w.close
|
||
r = Zlib::GzipReader.new(StringIO.new(s))
|
||
r.ungetc ?!
|
||
assert_equal(-1, r.pos, "[ruby-core:81488][Bug #13616]")
|
||
end
|
||
def test_open
|
||
Tempfile.create("test_zlib_gzip_reader_open") {|t|
|
||
t.close
|