[前][次][番号順一覧][スレッド一覧]

ruby-changes:37594

From: nobu <ko1@a...>
Date: Sat, 21 Feb 2015 19:52:04 +0900 (JST)
Subject: [ruby-changes:37594] nobu:r49675 (trunk): re.c: RMatch::regexp can be nil

nobu	2015-02-21 19:51:52 +0900 (Sat, 21 Feb 2015)

  New Revision: 49675

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49675

  Log:
    re.c: RMatch::regexp can be nil
    
    * re.c (match_aref): RMatch::regexp is Qnil after matching by a
      string since r45451.  [ruby-core:68209] [Bug #10877]

  Modified files:
    trunk/ChangeLog
    trunk/re.c
    trunk/test/ruby/test_regexp.rb
Index: re.c
===================================================================
--- re.c	(revision 49674)
+++ re.c	(revision 49675)
@@ -1787,7 +1787,7 @@ name_to_backref_error(VALUE name) https://github.com/ruby/ruby/blob/trunk/re.c#L1787
 static VALUE
 match_aref(int argc, VALUE *argv, VALUE match)
 {
-    VALUE idx, rest;
+    VALUE idx, rest, re;
 
     match_check(match);
     rb_scan_args(argc, argv, "11", &idx, &rest);
@@ -1808,7 +1808,8 @@ match_aref(int argc, VALUE *argv, VALUE https://github.com/ruby/ruby/blob/trunk/re.c#L1808
 		/* fall through */
 	      case T_STRING:
 		p = StringValuePtr(idx);
-		if (!rb_enc_compatible(RREGEXP(RMATCH(match)->regexp)->src, idx) ||
+		re = RMATCH(match)->regexp;
+		if (NIL_P(re) || !rb_enc_compatible(RREGEXP(re)->src, idx) ||
 		    (num = name_to_backref_number(RMATCH_REGS(match), RMATCH(match)->regexp,
 						  p, p + RSTRING_LEN(idx))) < 1) {
 		    name_to_backref_error(idx);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 49674)
+++ ChangeLog	(revision 49675)
@@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Sat Feb 21 19:51:49 2015  Nobuyoshi Nakada  <nobu@r...>
+
+	* re.c (match_aref): RMatch::regexp is Qnil after matching by a
+	  string since r45451.  [ruby-core:68209] [Bug #10877]
+
 Sat Feb 21 16:18:42 2015  Stefan Schuler  <mail@s...>
 
 	* compar.c (Init_Comparable): [DOC] Replace camelcase variable name.
Index: test/ruby/test_regexp.rb
===================================================================
--- test/ruby/test_regexp.rb	(revision 49674)
+++ test/ruby/test_regexp.rb	(revision 49675)
@@ -545,6 +545,19 @@ class TestRegexp < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_regexp.rb#L545
     assert_equal("foo", $&)
   end
 
+  def test_match_without_regexp
+    bug10877 = '[ruby-core:68209] [Bug #10877]'
+    "abc".sub("a", "")
+    assert_raise_with_message(IndexError, /foo/, bug10877) {$~["foo"]}
+    key = "\u{3042}"
+    [Encoding::UTF_8, Encoding::Shift_JIS, Encoding::EUC_JP].each do |enc|
+      idx = key.encode(enc)
+      EnvUtil.with_default_external(enc) do
+        assert_raise_with_message(IndexError, /#{idx}/, bug10877) {$~[idx]}
+      end
+    end
+  end
+
   def test_last_match
     /(...)(...)(...)(...)?/.match("foobarbaz")
     assert_equal("foobarbaz", Regexp.last_match(0))

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]