[macruby-changes] [1702] MacRuby/branches/experimental

source_changes at macosforge.org source_changes at macosforge.org
Tue Jun 2 17:14:03 PDT 2009


Revision: 1702
          http://trac.macosforge.org/projects/ruby/changeset/1702
Author:   lsansonetti at apple.com
Date:     2009-06-02 17:14:03 -0700 (Tue, 02 Jun 2009)
Log Message:
-----------
fixed a few taint bugs

Modified Paths:
--------------
    MacRuby/branches/experimental/array.c
    MacRuby/branches/experimental/string.c

Modified: MacRuby/branches/experimental/array.c
===================================================================
--- MacRuby/branches/experimental/array.c	2009-06-02 22:57:31 UTC (rev 1701)
+++ MacRuby/branches/experimental/array.c	2009-06-03 00:14:03 UTC (rev 1702)
@@ -2310,19 +2310,27 @@
     }
 
     len = NUM2LONG(times);
-    if (len == 0) return ary_new(rb_obj_class(ary), 0);
-    if (len < 0) {
-	rb_raise(rb_eArgError, "negative argument");
+    if (len == 0) {
+	ary2 = ary_new(rb_obj_class(ary), 0);
     }
-    n = RARRAY_LEN(ary);
-    if (LONG_MAX/len < n) {
-	rb_raise(rb_eArgError, "argument too big");
+    else {
+	if (len < 0) {
+	    rb_raise(rb_eArgError, "negative argument");
+	}
+	n = RARRAY_LEN(ary);
+	if (LONG_MAX/len < n) {
+	    rb_raise(rb_eArgError, "argument too big");
+	}
+	ary2 = ary_new(rb_obj_class(ary), 0);
+	for (i = 0; i < len; i++) {
+	    CFArrayAppendArray((CFMutableArrayRef)ary2,
+		    (CFArrayRef)ary,
+		    CFRangeMake(0, n));
+	}
     }
-    ary2 = ary_new(rb_obj_class(ary), 0);
-    for (i = 0; i < len; i++) {
-	CFArrayAppendArray((CFMutableArrayRef)ary2,
-		(CFArrayRef)ary,
-		CFRangeMake(0, n));
+
+    if (OBJ_TAINTED(ary)) {
+	OBJ_TAINT(ary2);
     }
 
     return ary2;

Modified: MacRuby/branches/experimental/string.c
===================================================================
--- MacRuby/branches/experimental/string.c	2009-06-02 22:57:31 UTC (rev 1701)
+++ MacRuby/branches/experimental/string.c	2009-06-03 00:14:03 UTC (rev 1702)
@@ -1616,14 +1616,16 @@
 {
     long slen;
 
-    if (len < 0) rb_raise(rb_eIndexError, "negative length %ld", len);
+    if (len < 0) {
+	rb_raise(rb_eIndexError, "negative length %ld", len);
+    }
 
     StringValue(val);
     rb_str_modify(str);
     slen = CFStringGetLength((CFStringRef)str);
 
     if (slen < beg) {
-      out_of_range:
+out_of_range:
 	rb_raise(rb_eIndexError, "index %ld out of string", beg);
     }
     if (beg < 0) {
@@ -1636,6 +1638,10 @@
 	len = slen - beg;
     }
     rb_str_splice_0(str, beg, len, val);
+
+    if (OBJ_TAINTED(val)) {
+	OBJ_TAINT(str);
+    }
 }
 
 void
@@ -1683,36 +1689,36 @@
     long idx, beg;
 
     switch (TYPE(indx)) {
-      case T_FIXNUM:
-	idx = FIX2LONG(indx);
-      num_index:
-	rb_str_splice(str, idx, 1, val);
-	return val;
+	case T_FIXNUM:
+	    idx = FIX2LONG(indx);
+num_index:
+	    rb_str_splice(str, idx, 1, val);
+	    return val;
 
-      case T_REGEXP:
-	rb_str_subpat_set(str, indx, 0, val);
-	return val;
+	case T_REGEXP:
+	    rb_str_subpat_set(str, indx, 0, val);
+	    return val;
 
-      case T_STRING:
-	beg = rb_str_index(str, indx, 0);
-	if (beg < 0) {
-	    rb_raise(rb_eIndexError, "string not matched");
-	}
-	beg = rb_str_sublen(str, beg);
-	rb_str_splice(str, beg, str_strlen(indx, 0), val);
-	return val;
+	case T_STRING:
+	    beg = rb_str_index(str, indx, 0);
+	    if (beg < 0) {
+		rb_raise(rb_eIndexError, "string not matched");
+	    }
+	    beg = rb_str_sublen(str, beg);
+	    rb_str_splice(str, beg, str_strlen(indx, 0), val);
+	    return val;
 
-      default:
-	/* check if indx is Range */
-	{
-	    long beg, len;
-	    if (rb_range_beg_len(indx, &beg, &len, str_strlen(str, 0), 2)) {
-		rb_str_splice(str, beg, len, val);
-		return val;
+	default:
+	    /* check if indx is Range */
+	    {
+		long beg, len;
+		if (rb_range_beg_len(indx, &beg, &len, str_strlen(str, 0), 2)) {
+		    rb_str_splice(str, beg, len, val);
+		    return val;
+		}
 	    }
-	}
-	idx = NUM2LONG(indx);
-	goto num_index;
+	    idx = NUM2LONG(indx);
+	    goto num_index;
     }
 }
 
@@ -4540,9 +4546,10 @@
     width = NUM2LONG(w);
     n = CFStringGetLength((CFStringRef)str);
    
-    str =  rb_str_dup(str);
-    if (width < 0 || width <= n)
+    str = rb_str_dup(str);
+    if (width < 0 || width <= n) {
 	return str;
+    }
     width -= n;
 
     if (NIL_P(pad)) {
@@ -4568,6 +4575,10 @@
 	rb_bug("invalid jflag");
     }
 
+    if (OBJ_TAINTED(pad)) {
+	OBJ_TAINT(str);
+    }
+
     return str;
 }
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090602/863b4011/attachment.html>


More information about the macruby-changes mailing list