mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
zlib.c: replace with substring
* ext/zlib/zlib.c (zstream_discard_input): replace with unread portion substring, not modifying the input buffer directly. [ruby-core:78567] [Bug #13021] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57042 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
0c83666c6c
commit
f46a137746
2 changed files with 8 additions and 11 deletions
|
@ -879,9 +879,8 @@ zstream_discard_input(struct zstream *z, long len)
|
||||||
z->input = Qnil;
|
z->input = Qnil;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
memmove(RSTRING_PTR(z->input), RSTRING_PTR(z->input) + len,
|
z->input = rb_str_substr(z->input, len,
|
||||||
RSTRING_LEN(z->input) - len);
|
RSTRING_LEN(z->input) - len);
|
||||||
rb_str_resize(z->input, RSTRING_LEN(z->input) - len);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2406,9 +2405,7 @@ gzfile_read_raw_ensure(struct gzfile *gz, long size)
|
||||||
VALUE str;
|
VALUE str;
|
||||||
|
|
||||||
if (gz->io == Qundef) { /* Zlib.gunzip */
|
if (gz->io == Qundef) { /* Zlib.gunzip */
|
||||||
if (NIL_P(gz->z.input))
|
if (NIL_P(gz->z.input) || RSTRING_LEN(gz->z.input) < size)
|
||||||
rb_bug("unexpected condition: both gz->io and gz->z.input are nil");
|
|
||||||
if (RSTRING_LEN(gz->z.input) < size)
|
|
||||||
rb_raise(cGzError, "unexpected end of string");
|
rb_raise(cGzError, "unexpected end of string");
|
||||||
}
|
}
|
||||||
while (NIL_P(gz->z.input) || RSTRING_LEN(gz->z.input) < size) {
|
while (NIL_P(gz->z.input) || RSTRING_LEN(gz->z.input) < size) {
|
||||||
|
|
|
@ -1128,25 +1128,25 @@ if defined? Zlib
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_gzip
|
def test_gzip
|
||||||
actual = Zlib.gzip("foo")
|
actual = Zlib.gzip("foo".freeze)
|
||||||
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
|
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
|
||||||
actual[9] = "\xff" # replace OS
|
actual[9] = "\xff" # replace OS
|
||||||
expected = %w[1f8b08000000000000ff4bcbcf07002165738c03000000].pack("H*")
|
expected = %w[1f8b08000000000000ff4bcbcf07002165738c03000000].pack("H*")
|
||||||
assert_equal expected, actual
|
assert_equal expected, actual
|
||||||
|
|
||||||
actual = Zlib.gzip("foo", 0)
|
actual = Zlib.gzip("foo".freeze, 0)
|
||||||
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
|
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
|
||||||
actual[9] = "\xff" # replace OS
|
actual[9] = "\xff" # replace OS
|
||||||
expected = %w[1f8b08000000000000ff010300fcff666f6f2165738c03000000].pack("H*")
|
expected = %w[1f8b08000000000000ff010300fcff666f6f2165738c03000000].pack("H*")
|
||||||
assert_equal expected, actual
|
assert_equal expected, actual
|
||||||
|
|
||||||
actual = Zlib.gzip("foo", 9)
|
actual = Zlib.gzip("foo".freeze, 9)
|
||||||
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
|
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
|
||||||
actual[9] = "\xff" # replace OS
|
actual[9] = "\xff" # replace OS
|
||||||
expected = %w[1f8b08000000000002ff4bcbcf07002165738c03000000].pack("H*")
|
expected = %w[1f8b08000000000002ff4bcbcf07002165738c03000000].pack("H*")
|
||||||
assert_equal expected, actual
|
assert_equal expected, actual
|
||||||
|
|
||||||
actual = Zlib.gzip("foo", 9, Zlib::FILTERED)
|
actual = Zlib.gzip("foo".freeze, 9, Zlib::FILTERED)
|
||||||
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
|
actual[4, 4] = "\x00\x00\x00\x00" # replace mtime
|
||||||
actual[9] = "\xff" # replace OS
|
actual[9] = "\xff" # replace OS
|
||||||
expected = %w[1f8b08000000000002ff4bcbcf07002165738c03000000].pack("H*")
|
expected = %w[1f8b08000000000002ff4bcbcf07002165738c03000000].pack("H*")
|
||||||
|
@ -1155,7 +1155,7 @@ if defined? Zlib
|
||||||
|
|
||||||
def test_gunzip
|
def test_gunzip
|
||||||
src = %w[1f8b08000000000000034bcbcf07002165738c03000000].pack("H*")
|
src = %w[1f8b08000000000000034bcbcf07002165738c03000000].pack("H*")
|
||||||
assert_equal 'foo', Zlib.gunzip(src)
|
assert_equal 'foo', Zlib.gunzip(src.freeze)
|
||||||
|
|
||||||
src = %w[1f8b08000000000000034bcbcf07002165738c03000001].pack("H*")
|
src = %w[1f8b08000000000000034bcbcf07002165738c03000001].pack("H*")
|
||||||
assert_raise(Zlib::GzipFile::LengthError){ Zlib.gunzip(src) }
|
assert_raise(Zlib::GzipFile::LengthError){ Zlib.gunzip(src) }
|
||||||
|
|
Loading…
Reference in a new issue