* ext/zlib/zlib.c (do_inflate): Inflate more data if buffered data
exists. Allows Zlib::Inflate#set_dictionary to work. [ruby-trunk - Bug #5929] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34552 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e1d113cbef
commit
403dc5357d
@ -1,3 +1,9 @@
|
|||||||
|
Sat Feb 11 08:23:02 2012 Eric Hodel <drbrain@segment7.net>
|
||||||
|
|
||||||
|
* ext/zlib/zlib.c (do_inflate): Inflate more data if buffered data
|
||||||
|
exists. Allows Zlib::Inflate#set_dictionary to work.
|
||||||
|
[ruby-trunk - Bug #5929]
|
||||||
|
|
||||||
Sat Feb 11 06:00:48 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
Sat Feb 11 06:00:48 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
* dir.c (fnmatch): The * needs to be escaped to avoid formatting in
|
* dir.c (fnmatch): The * needs to be escaped to avoid formatting in
|
||||||
|
@ -1732,7 +1732,7 @@ do_inflate(struct zstream *z, VALUE src)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
StringValue(src);
|
StringValue(src);
|
||||||
if (RSTRING_LEN(src) > 0) { /* prevent Z_BUF_ERROR */
|
if (RSTRING_LEN(src) > 0 || z->stream.avail_in > 0) { /* prevent Z_BUF_ERROR */
|
||||||
zstream_run(z, (Bytef*)RSTRING_PTR(src), RSTRING_LEN(src), Z_SYNC_FLUSH);
|
zstream_run(z, (Bytef*)RSTRING_PTR(src), RSTRING_LEN(src), Z_SYNC_FLUSH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1749,7 +1749,23 @@ do_inflate(struct zstream *z, VALUE src)
|
|||||||
*
|
*
|
||||||
* Raises a Zlib::NeedDict exception if a preset dictionary is needed to
|
* Raises a Zlib::NeedDict exception if a preset dictionary is needed to
|
||||||
* decompress. Set the dictionary by Zlib::Inflate#set_dictionary and then
|
* decompress. Set the dictionary by Zlib::Inflate#set_dictionary and then
|
||||||
* call this method again with an empty string. (<i>???</i>)
|
* call this method again with an empty string to flush the stream:
|
||||||
|
*
|
||||||
|
* inflater = Zlib::Inflate.new
|
||||||
|
*
|
||||||
|
* begin
|
||||||
|
* out = inflater.inflate compressed
|
||||||
|
* rescue Zlib::NeedDict
|
||||||
|
* # ensure the dictionary matches the stream's required dictionary
|
||||||
|
* raise unless inflater.adler == Zlib.adler32(dictionary)
|
||||||
|
*
|
||||||
|
* inflater.set_dictionary dictionary
|
||||||
|
* inflater.inflate ''
|
||||||
|
* end
|
||||||
|
*
|
||||||
|
* # ...
|
||||||
|
*
|
||||||
|
* inflater.close
|
||||||
*
|
*
|
||||||
* See also Zlib::Inflate.new
|
* See also Zlib::Inflate.new
|
||||||
*/
|
*/
|
||||||
|
@ -195,6 +195,29 @@ if defined? Zlib
|
|||||||
z << "foo" # ???
|
z << "foo" # ???
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_inflate_dictionary
|
||||||
|
dictionary = "foo"
|
||||||
|
|
||||||
|
deflate = Zlib::Deflate.new
|
||||||
|
deflate.set_dictionary dictionary
|
||||||
|
compressed = deflate.deflate "foofoofoo", Zlib::FINISH
|
||||||
|
deflate.close
|
||||||
|
|
||||||
|
out = nil
|
||||||
|
inflate = Zlib::Inflate.new
|
||||||
|
|
||||||
|
begin
|
||||||
|
out = inflate.inflate compressed
|
||||||
|
|
||||||
|
flunk "Zlib::NeedDict was not raised"
|
||||||
|
rescue Zlib::NeedDict
|
||||||
|
inflate.set_dictionary dictionary
|
||||||
|
out = inflate.inflate ""
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal "foofoofoo", out
|
||||||
|
end
|
||||||
|
|
||||||
def test_sync
|
def test_sync
|
||||||
z = Zlib::Deflate.new
|
z = Zlib::Deflate.new
|
||||||
s = z.deflate("foo" * 1000, Zlib::FULL_FLUSH)
|
s = z.deflate("foo" * 1000, Zlib::FULL_FLUSH)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user