[macruby-changes] [3510] MacRuby/trunk/object.c

source_changes at macosforge.org source_changes at macosforge.org
Fri Feb 12 01:06:30 PST 2010


Revision: 3510
          http://trac.macosforge.org/projects/ruby/changeset/3510
Author:   lsansonetti at apple.com
Date:     2010-02-12 01:06:27 -0800 (Fri, 12 Feb 2010)
Log Message:
-----------
fixed some freeze/taint problems with immediates

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

Modified: MacRuby/trunk/object.c
===================================================================
--- MacRuby/trunk/object.c	2010-02-12 06:03:16 UTC (rev 3509)
+++ MacRuby/trunk/object.c	2010-02-12 09:06:27 UTC (rev 3510)
@@ -801,7 +801,9 @@
 static VALUE
 rb_obj_tainted_p(VALUE obj, SEL sel)
 {
-    if (!SPECIAL_CONST_P(obj) && NATIVE(obj)) {
+    if (SPECIAL_CONST_P(obj))
+	return Qfalse;
+    else if (NATIVE(obj)) {
 	switch (TYPE(obj)) {
 	    case T_SYMBOL:
 		return Qfalse;
@@ -821,7 +823,8 @@
 		    return RBASIC(obj)->flags & FL_TAINT ? Qtrue : Qfalse;
 		}
 	    default:
-		return rb_objc_flag_check((const void *)obj, FL_TAINT) ? Qtrue : Qfalse;
+		return rb_objc_flag_check((const void *)obj, FL_TAINT)
+		    ? Qtrue : Qfalse;
 	}
     }
     if (FL_TEST(obj, FL_TAINT)) {
@@ -833,7 +836,7 @@
 VALUE
 rb_obj_tainted(VALUE obj)
 {
-	return rb_obj_tainted_p(obj, 0);
+    return rb_obj_tainted_p(obj, 0);
 }
 
 /*
@@ -849,7 +852,10 @@
 rb_obj_taint_m(VALUE obj, SEL sel)
 {
     rb_secure(4);
-    if (!SPECIAL_CONST_P(obj) && NATIVE(obj)) {
+    if (SPECIAL_CONST_P(obj)) {
+	return obj;
+    }
+    else if (NATIVE(obj)) {
 	switch (TYPE(obj)) {
 	    case T_SYMBOL:
 		break;
@@ -888,7 +894,7 @@
 VALUE 
 rb_obj_taint(VALUE obj)
 {
-	return rb_obj_taint_m(obj, 0);
+    return rb_obj_taint_m(obj, 0);
 }
 
 
@@ -942,7 +948,7 @@
 VALUE
 rb_obj_untaint(VALUE obj)
 {
-	return rb_obj_untaint_m(obj, 0);
+    return rb_obj_untaint_m(obj, 0);
 }
 
 static VALUE
@@ -1111,6 +1117,7 @@
 	    rb_raise(rb_eSecurityError, "Insecure: can't freeze object");
 	}
 	else if (SPECIAL_CONST_P(obj)) {
+immediate:
 	    if (!immediate_frozen_tbl) {
 		immediate_frozen_tbl = st_init_numtable();
 		GC_ROOT(&immediate_frozen_tbl);
@@ -1120,7 +1127,7 @@
 	else if (NATIVE(obj)) {
 	    switch (TYPE(obj)) {
 		case T_SYMBOL:
-		    break;
+		    goto immediate;
 
 		case T_ARRAY:
 		    if (rb_klass_is_rary(*(VALUE *)obj)) {
@@ -1174,6 +1181,7 @@
 rb_obj_frozen(VALUE obj, SEL sel)
 {
     if (SPECIAL_CONST_P(obj)) {
+immediate:
 	if (!immediate_frozen_tbl) {
 	    return Qfalse;
 	}
@@ -1184,7 +1192,7 @@
     }
     switch (TYPE(obj)) {
 	case T_SYMBOL:
-	    return Qfalse;
+	    goto immediate;
 
 	case T_ARRAY:
 	    if (rb_klass_is_rary(*(VALUE *)obj)) {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100212/d4ff56b6/attachment.html>


More information about the macruby-changes mailing list