summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorglass <glass@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-27 11:43:02 +0000
committerglass <glass@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-27 11:43:02 +0000
commitcd453f16b42ea9b68993631b27773165b24ee9b2 (patch)
treea1c01e21da4eb2ff73898ca2deb0bd86f0333386
parent90833dd452c0c7276b1dd5a88ab1dd99fbb2d6a5 (diff)
* ext/stringio/stringio.c (strio_ungetc): raise IOError instead of RuntimeError
if the string is frozen. [Bug #7231] [ruby-core:48530] * ext/stringio/stringio.c (strio_ungetbyte): ditto. * test/stringio/test_stringio.rb: a test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog10
-rw-r--r--ext/stringio/stringio.c2
-rw-r--r--test/stringio/test_stringio.rb8
3 files changed, 20 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index cbabf01..c26c6cf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Thu Dec 27 20:11:29 2012 Masaki Matsushita <glass.saga@gmail.com>
+
+ * ext/stringio/stringio.c (strio_ungetc): raise IOError instead of RuntimeError
+ if the string is frozen.
+ [Bug #7231] [ruby-core:48530]
+
+ * ext/stringio/stringio.c (strio_ungetbyte): ditto.
+
+ * test/stringio/test_stringio.rb: a test for above.
+
Wed Dec 26 23:55:18 2012 Keiju Ishitsuka <keiju@ishitsuka.com>
* lib/irb/context.rb: fix IRB::Inspector#keys_with_inspector [Bug #7598]
diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c
index d763854..501c7dd 100644
--- a/ext/stringio/stringio.c
+++ b/ext/stringio/stringio.c
@@ -737,6 +737,7 @@ strio_ungetc(VALUE self, VALUE c)
rb_encoding *enc, *enc2;
if (NIL_P(c)) return Qnil;
+ check_modifiable(ptr);
if (FIXNUM_P(c)) {
int cc = FIX2INT(c);
char buf[16];
@@ -801,6 +802,7 @@ strio_ungetbyte(VALUE self, VALUE c)
cl = RSTRING_LEN(c);
if (cl == 0) return Qnil;
}
+ check_modifiable(ptr);
rb_str_modify(str);
if (cl > pos) {
char *s;
diff --git a/test/stringio/test_stringio.rb b/test/stringio/test_stringio.rb
index 417a53b..0ea3e4f 100644
--- a/test/stringio/test_stringio.rb
+++ b/test/stringio/test_stringio.rb
@@ -504,6 +504,14 @@ class TestStringIO < Test::Unit::TestCase
assert_raise(RuntimeError, bug) {s.reopen("")}
end
+ def test_frozen_string
+ s = StringIO.new("".freeze)
+ bug = '[ruby-core:48530]'
+ assert_raise(IOError, bug) {s.write("foo")}
+ assert_raise(IOError, bug) {s.ungetc("a")}
+ assert_raise(IOError, bug) {s.ungetbyte("a")}
+ end
+
def test_readlines_limit_0
assert_raise(ArgumentError, "[ruby-dev:43392]") { StringIO.new.readlines(0) }
end