diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-04-16 06:37:42 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-04-16 06:37:42 +0000 |
commit | 5b2b1130cf7beadedb7176e44b356f157f5a8838 (patch) | |
tree | b9eb376355de0334f91dc78e160c75547b6e8cbc | |
parent | 5bae48bd566603d005543c1ad5130a6a286800a3 (diff) | |
download | ruby-5b2b1130cf7beadedb7176e44b356f157f5a8838.tar.gz |
string.c: fix checking order
* string.c (str_undump): check for suffix before if Unicode escape
conflicts with it. the message "but used force_encoding" sounds
strange when it is not used.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63162 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | string.c | 8 | ||||
-rw-r--r-- | test/ruby/test_string.rb | 3 |
2 files changed, 7 insertions, 4 deletions
@@ -6289,15 +6289,15 @@ str_undump(VALUE str) int encidx; ptrdiff_t size; - if (utf8) { - rb_raise(rb_eRuntimeError, "dumped string contained Unicode escape but used force_encoding"); - } - size = rb_strlen_lit(".force_encoding(\""); if (s_end - s <= size) goto invalid_format; if (memcmp(s, ".force_encoding(\"", size) != 0) goto invalid_format; s += size; + if (utf8) { + rb_raise(rb_eRuntimeError, "dumped string contained Unicode escape but used force_encoding"); + } + encname = s; s = memchr(s, '"', s_end-s); size = s - encname; diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb index fee71791a1..d6356fcfa1 100644 --- a/test/ruby/test_string.rb +++ b/test/ruby/test_string.rb @@ -814,6 +814,9 @@ CODE assert_raise(RuntimeError) { S('"\xA"').undump } assert_raise(RuntimeError) { S('"\\"').undump } assert_raise(RuntimeError) { S(%("\0")).undump } + assert_raise_with_message(RuntimeError, /invalid/) { + '"\\u{007F}".xxxxxx'.undump + } end def test_dup |