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

ruby-changes:2796

From: ko1@a...
Date: 18 Dec 2007 14:45:28 +0900
Subject: [ruby-changes:2796] matz - Ruby:r14287 (trunk): * string.c (str_nth): need not to raise out-of-range exception.

matz	2007-12-18 14:44:30 +0900 (Tue, 18 Dec 2007)

  New Revision: 14287

  Modified files:
    trunk/ChangeLog
    trunk/string.c
    trunk/test/ruby/test_m17n.rb

  Log:
    * string.c (str_nth): need not to raise out-of-range exception.
    
    * test/ruby/test_m17n.rb (TestM17N::test_str_aref_len): removed
      debug print.

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=14287&r2=14286
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14287&r2=14286
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_m17n.rb?r1=14287&r2=14286

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 14286)
+++ ChangeLog	(revision 14287)
@@ -1,3 +1,10 @@
+Tue Dec 18 14:39:05 2007  Yukihiro Matsumoto  <matz@r...>
+
+	* string.c (str_nth): need not to raise out-of-range exception.
+
+	* test/ruby/test_m17n.rb (TestM17N::test_str_aref_len): removed
+	  debug print.
+
 Tue Dec 18 14:05:23 2007  Nobuyoshi Nakada  <nobu@r...>
 
 	* enc/depend: get rid of target expanded as empty for nmake.
Index: string.c
===================================================================
--- string.c	(revision 14286)
+++ string.c	(revision 14287)
@@ -746,26 +746,22 @@
 }
 
 static char*
-str_nth(const char *p, const char *e, int nth, rb_encoding *enc, int asc)
+str_nth(char *p, char *e, int nth, rb_encoding *enc, int asc)
 {
     if (asc)
 	p += nth;
     else
 	p = rb_enc_nth(p, e, nth, enc);
-    if (!p) {
-	rb_raise(rb_eArgError, "invalid mbstring sequence");
-    }
-    if (p > e) {
-	rb_raise(rb_eIndexError, "index out of range");
-    }
-    return (char*)p;
+    if (!p) return 0;
+    if (p > e) return e;
+    return p;
 }
 
 static int
-str_offset(const char *p, const char *e, int nth, rb_encoding *enc, int asc)
+str_offset(char *p, char *e, int nth, rb_encoding *enc, int asc)
 {
     const char *pp = str_nth(p, e, nth, enc, asc);
-
+    if (!pp) return e - p;
     return pp - p;
 }
 
@@ -1456,8 +1452,7 @@
     if (len - offset < slen) return -1;
     s = RSTRING_PTR(str);
     if (offset) {
-	s = str_nth(s, RSTRING_END(str), offset, enc, IS_7BIT(str));
-	offset = s - RSTRING_PTR(str);
+	offset = str_offset(s, RSTRING_END(str), offset, enc, IS_7BIT(str));
     }
     if (slen == 0) return offset;
     /* need proceed one character at a time */
@@ -1575,6 +1570,7 @@
     t = RSTRING_PTR(sub);
     for (;;) {
 	s = str_nth(sbeg, e, pos, enc, asc);
+	if (!s) return -1;
 	if (memcmp(s, t, slen) == 0) {
 	    return pos;
 	}
@@ -2139,7 +2135,9 @@
 	len = slen - beg;
     }
     p = str_nth(RSTRING_PTR(str), RSTRING_END(str), beg, enc, asc);
+    if (!p) p = RSTRING_END(str);
     e = str_nth(p, RSTRING_END(str), len, enc, asc);
+    if (!e) e = RSTRING_END(str);
     /* error check */
     beg = p - RSTRING_PTR(str);	/* physical position */
     len = e - p;		/* physical length */
Index: test/ruby/test_m17n.rb
===================================================================
--- test/ruby/test_m17n.rb	(revision 14286)
+++ test/ruby/test_m17n.rb	(revision 14287)
@@ -695,7 +695,6 @@
     STRINGS.each {|s|
       t = ''
       0.step(s.length-1, 2) {|i|
-        p [s,s.encoding,i]
         t << s[i,2]
       }
       assert_equal(t, s)

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

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