[macruby-changes] [3791] MacRuby/trunk/string.c

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 17 18:53:12 PDT 2010


Revision: 3791
          http://trac.macosforge.org/projects/ruby/changeset/3791
Author:   lsansonetti at apple.com
Date:     2010-03-17 18:53:09 -0700 (Wed, 17 Mar 2010)
Log Message:
-----------
fixing a couple of bugs in #scan

Modified Paths:
--------------
    MacRuby/trunk/string.c

Modified: MacRuby/trunk/string.c
===================================================================
--- MacRuby/trunk/string.c	2010-03-18 01:34:30 UTC (rev 3790)
+++ MacRuby/trunk/string.c	2010-03-18 01:53:09 UTC (rev 3791)
@@ -2617,15 +2617,17 @@
     const bool block_given = rb_block_given_p();
 
     pat = get_pat(pat, true);
-    long start = 0;
+    const bool tainted = OBJ_TAINTED(self) || OBJ_TAINTED(pat);
 
     VALUE ary = 0;
     if (!block_given) {
 	ary = rb_ary_new();
     }
 
+    VALUE match = Qnil;
+    long start = 0;
     while (rb_reg_search(pat, self, start, false) >= 0) {
-	VALUE match = rb_backref_get();
+	match = rb_backref_get();
 
 	int count = 0;
 	rb_match_result_t *results = rb_reg_match_results(match, &count);
@@ -2641,11 +2643,18 @@
 	VALUE scan_result;
 	if (count == 1) {
 	    scan_result = rb_reg_nth_match(0, match);
+	    if (tainted) {
+		OBJ_TAINT(scan_result);
+	    }
 	}
 	else {
 	    scan_result = rb_ary_new2(count);
 	    for (int i = 1; i < count; i++) {
-		rb_ary_push(scan_result, rb_reg_nth_match(i, match));
+		VALUE substr = rb_reg_nth_match(i, match);
+		if (tainted) {
+		    OBJ_TAINT(tainted);
+		}
+		rb_ary_push(scan_result, substr);
 	    }
 	}
 
@@ -2658,10 +2667,10 @@
 	else {
 	    rb_ary_push(ary, scan_result);
 	}
-
-	rb_backref_set(match);
     }
 
+    rb_backref_set(match);
+
     return block_given ? self : ary;
 }
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100317/2e8e165f/attachment.html>


More information about the macruby-changes mailing list