summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-04 15:44:57 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-04 15:44:57 +0000
commitcc94db60ba2d21d8371a4bb6a00580c4ba99f544 (patch)
treea675497cc43022f4cea560157413dabcc2a19b5b
parent21538b219e21e9e20b60375dedbe839365526672 (diff)
merge revision(s) 41014: [Backport #8467]
* ext/zlib/zlib.c (gzfile_read, gzfile_read_all, gzfile_getc), (gzreader_gets): check EOF. [ruby-core:55220] [Bug #8467] * ext/zlib/zlib.c (gzfile_read, gzfile_read_all, gzfile_getc), (gzreader_gets): check EOF. [ruby-core:55220] [Bug #8467] * lib/cgi/util.rb: All class methods moduleized. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@41073 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--ext/zlib/zlib.c6
-rw-r--r--test/zlib/test_zlib.rb6
-rw-r--r--version.h2
4 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 969fb09052..ccf52f0b3e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Jun 5 00:38:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/zlib.c (gzfile_read, gzfile_read_all, gzfile_getc),
+ (gzreader_gets): check EOF. [ruby-core:55220] [Bug #8467]
+
Wed Jun 5 00:32:18 2013 Tanaka Akira <akr@fsij.org>
* test/ruby/test_require.rb: Remove temporally files in the tests.
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
index 170d306162..69fd6769fa 100644
--- a/ext/zlib/zlib.c
+++ b/ext/zlib/zlib.c
@@ -2707,7 +2707,7 @@ gzfile_read(struct gzfile *gz, long len)
if (len == 0) return rb_str_new(0, 0);
if (len < 0) return Qnil;
dst = zstream_shift_buffer(&gz->z, len);
- gzfile_calc_crc(gz, dst);
+ if (!NIL_P(dst)) gzfile_calc_crc(gz, dst);
return dst;
}
@@ -2770,6 +2770,7 @@ gzfile_read_all(struct gzfile *gz)
}
dst = zstream_detach_buffer(&gz->z);
+ if (NIL_P(dst)) return dst;
gzfile_calc_crc(gz, dst);
OBJ_TAINT(dst);
return gzfile_newstr(gz, dst);
@@ -2816,6 +2817,7 @@ gzfile_getc(struct gzfile *gz)
buf = gz->z.buf;
len = rb_enc_mbclen(RSTRING_PTR(buf), RSTRING_END(buf), gz->enc);
dst = gzfile_read(gz, len);
+ if (NIL_P(dst)) return dst;
return gzfile_newstr(gz, dst);
}
}
@@ -4041,6 +4043,7 @@ gzreader_gets(int argc, VALUE *argv, VALUE obj)
n = limit;
}
dst = zstream_shift_buffer(&gz->z, n);
+ if (NIL_P(dst)) return dst;
gzfile_calc_crc(gz, dst);
dst = gzfile_newstr(gz, dst);
}
@@ -4102,6 +4105,7 @@ gzreader_gets(int argc, VALUE *argv, VALUE obj)
gz->lineno++;
dst = gzfile_read(gz, n);
+ if (NIL_P(dst)) return dst;
if (rspara) {
gzreader_skip_linebreaks(gz);
}
diff --git a/test/zlib/test_zlib.rb b/test/zlib/test_zlib.rb
index 4849396277..7b3ef2fc79 100644
--- a/test/zlib/test_zlib.rb
+++ b/test/zlib/test_zlib.rb
@@ -686,6 +686,7 @@ if defined? Zlib
end
def test_rewind
+ bug8467 = '[ruby-core:55220] [Bug #8467]'
t = Tempfile.new("test_zlib_gzip_reader_rewind")
t.close
Zlib::GzipWriter.open(t.path) {|gz| gz.print("foo") }
@@ -695,6 +696,11 @@ if defined? Zlib
f.rewind
assert_equal("foo", f.read)
end
+ open(t.path, "rb") do |f|
+ gz = Zlib::GzipReader.new(f)
+ gz.rewind
+ assert_equal(["foo"], gz.to_a, bug8467)
+ end
t.close(true)
end
diff --git a/version.h b/version.h
index 3cb5bfd9b5..1f29941f0a 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.0.0"
#define RUBY_RELEASE_DATE "2013-06-05"
-#define RUBY_PATCHLEVEL 207
+#define RUBY_PATCHLEVEL 208
#define RUBY_RELEASE_YEAR 2013
#define RUBY_RELEASE_MONTH 6