わたなべです.

何度も何度もすいません.

:まつもと ゆきひろです.

:  i = 0
:  ary_pushはチェックの前
:
:に統一しようと思うのですが,そもそもわたなべさんの修正の意義
:を良く理解していないので,まずいのかも知れません.が,たぶん,
:limitが0の場合と1の場合を特別扱いしたので問題なくなったと思
:うのですが….

ary_push の問題より beg が修正されないのが大元の原因でした.
("a,b,b:c" のような結果になる). だから

  i = 1
  beg はチェックの前

でよさそうです.

--- string.c.orig	Fri Feb  7 15:16:05 1997
+++ string.c	Wed Feb 19 17:03:20 1997
@@ -1629,6 +1629,8 @@
     rb_scan_args(argc, argv, "02", &spat, &limit);
     if (!NIL_P(limit)) {
 	lim = NUM2INT(limit);
+	if (lim == 0) limit = Qnil;
+	else if (lim == 1) return ary_new3(1, str);
 	i = 1;
     }
 
@@ -1680,9 +1682,9 @@
 		else {
 		    if (isspace(*ptr)) {
 			ary_push(result, str_substr(str, beg, end-beg));
-			if (!NIL_P(limit) && lim <= ++i) break;
 			skip = 1;
 			beg = end + 1;
+			if (!NIL_P(limit) && lim <= ++i) break;
 		    }
 		    else {
 			end++;
@@ -1694,8 +1696,8 @@
 	    for (end = beg = 0; ptr<eptr; ptr++) {
 		if (*ptr == char_sep) {
 		    ary_push(result, str_substr(str, beg, end-beg));
-		    if (!NIL_P(limit) && lim <= ++i) break;
 		    beg = end + 1;
+		    if (!NIL_P(limit) && lim <= ++i) break;
 		}
 		end++;
 	    }