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
|
||