diff options
| author | duerst <duerst@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-30 09:40:06 +0000 |
|---|---|---|
| committer | duerst <duerst@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-30 09:40:06 +0000 |
| commit | 458c447fdfbacfc5f8b3da40f103ca2bf8eb6ca2 (patch) | |
| tree | f6397cd73df1fea3bc3a0328ec5e568110691dc4 | |
| parent | 1ef67e7146a4a11259900c16746d3c8db9637e52 (diff) | |
| download | ruby-458c447fdfbacfc5f8b3da40f103ca2bf8eb6ca2.tar.gz ruby-458c447fdfbacfc5f8b3da40f103ca2bf8eb6ca2.tar.xz ruby-458c447fdfbacfc5f8b3da40f103ca2bf8eb6ca2.zip | |
* transcode.c: added check for frozen string for encode! (see Bug #1836)
* test/ruby/test_transcode.rb: added tests for the above
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@24322 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 6 | ||||
| -rw-r--r-- | test/ruby/test_transcode.rb | 2 | ||||
| -rw-r--r-- | transcode.c | 4 |
3 files changed, 12 insertions, 0 deletions
@@ -1,3 +1,9 @@ +Thu Jul 30 18:39:39 2009 Martin Duerst <duerst@it.aoyama.ac.jp> + + * transcode.c: added check for frozen string for encode! (see Bug #1836) + + * test/ruby/test_transcode.rb: added tests for the above + Thu Jul 30 16:45:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> * insns.def (defineclass): preserve encoding of class/module diff --git a/test/ruby/test_transcode.rb b/test/ruby/test_transcode.rb index 41e032fdb..cd956e134 100644 --- a/test/ruby/test_transcode.rb +++ b/test/ruby/test_transcode.rb @@ -11,6 +11,8 @@ class TestTranscode < Test::Unit::TestCase assert_raise(Encoding::UndefinedConversionError) { "\x80".encode('utf-8','ASCII-8BIT') } assert_raise(Encoding::InvalidByteSequenceError) { "\x80".encode('utf-8','US-ASCII') } assert_raise(Encoding::UndefinedConversionError) { "\xA5".encode('utf-8','iso-8859-3') } + assert_raise(RuntimeError) { 'hello'.freeze.encode!('iso-8859-1') } + assert_raise(RuntimeError) { '\u3053\u3093\u306b\u3061\u306f'.freeze.encode!('iso-8859-1') } # こんにちは end def test_arguments diff --git a/transcode.c b/transcode.c index ee6794d9b..9e4c8392c 100644 --- a/transcode.c +++ b/transcode.c @@ -2644,6 +2644,10 @@ str_encode_associate(VALUE str, int encidx) static VALUE str_encode_bang(int argc, VALUE *argv, VALUE str) { + if (OBJ_FROZEN(str)) { /* in future, may use str_frozen_check from string.c, but that's currently static */ + rb_raise(rb_eRuntimeError, "string frozen"); + } + VALUE newstr = str; int encidx = str_transcode(argc, argv, &newstr); |
