[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