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

ruby-changes:16752

From: yugui <ko1@a...>
Date: Sat, 24 Jul 2010 19:39:49 +0900 (JST)
Subject: [ruby-changes:16752] Ruby:r28748 (ruby_1_9_2): merges r28728 from trunk into ruby_1_9_2.

yugui	2010-07-24 19:39:35 +0900 (Sat, 24 Jul 2010)

  New Revision: 28748

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

  Log:
    merges r28728 from trunk into ruby_1_9_2.
    --
    * re.c (rb_reg_expr_str): fixed out-of-boundary access at invalid
      multibyte characters.

  Modified files:
    branches/ruby_1_9_2/ChangeLog
    branches/ruby_1_9_2/re.c

Index: ruby_1_9_2/ChangeLog
===================================================================
--- ruby_1_9_2/ChangeLog	(revision 28747)
+++ ruby_1_9_2/ChangeLog	(revision 28748)
@@ -1,3 +1,8 @@
+Fri Jul 23 09:02:43 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* re.c (rb_reg_expr_str): fixed out-of-boundary access at invalid
+	  multibyte characters.
+
 Thu Jul 22 16:27:41 2010  NARUSE, Yui  <naruse@r...>
 
 	* re.c (rb_reg_expr_str): fix broken Regexp#inspect when it
Index: ruby_1_9_2/re.c
===================================================================
--- ruby_1_9_2/re.c	(revision 28747)
+++ ruby_1_9_2/re.c	(revision 28748)
@@ -370,18 +370,20 @@
 		rb_str_buf_cat(str, p, clen);
 	    }
 	    else if (c == -1) {
-                int l;
+		clen = rb_enc_precise_mbclen(p, pend, enc);
+		if (!MBCLEN_CHARFOUND_P(clen)) {
+		    c = (unsigned char)*p;
+		    clen = 1;
+		    goto hex;
+		}
 		if (resenc) {
 		    unsigned int c = rb_enc_mbc_to_codepoint(p, pend, enc);
-		    l = rb_enc_codelen(c, enc);
 		    rb_str_buf_cat_escaped_char(str, c, unicode_p);
 		}
 		else {
-		    l = mbclen(p, pend, enc);
-		    rb_str_buf_cat(str, p, l);
+		    clen = MBCLEN_CHARFOUND_LEN(clen);
+		    rb_str_buf_cat(str, p, clen);
 		}
-		p += l;
-		continue;
 	    }
 	    else if (rb_enc_isprint(c, enc)) {
 		rb_str_buf_cat(str, p, clen);
@@ -389,6 +391,7 @@
 	    else if (!rb_enc_isspace(c, enc)) {
 		char b[8];
 
+	      hex:
 		snprintf(b, sizeof(b), "\\x%02X", c);
 		rb_str_buf_cat(str, b, 4);
 	    }

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

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