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

source_changes at macosforge.org source_changes at macosforge.org
Tue Dec 21 14:18:37 PST 2010


Revision: 5063
          http://trac.macosforge.org/projects/ruby/changeset/5063
Author:   watson1978 at gmail.com
Date:     2010-12-21 14:18:31 -0800 (Tue, 21 Dec 2010)
Log Message:
-----------
Object#trust with untrusted and frozen object will throw a RuntimeError. And When $SAFE is 3, throw an exception.

Test Script:
{{{
require 'test/unit/assertions.rb'
include Test::Unit::Assertions

o = Object.new
o.freeze
assert_nothing_raised(RuntimeError){ o.trust }

o = Object.new
o.untrust
o.freeze
assert_raise(RuntimeError){ o.trust }

puts :ok
}}}

{{{
o = Object.new
$SAFE = 3
o.trust
}}}
x

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

Modified: MacRuby/trunk/object.c
===================================================================
--- MacRuby/trunk/object.c	2010-12-21 21:44:58 UTC (rev 5062)
+++ MacRuby/trunk/object.c	2010-12-21 22:18:31 UTC (rev 5063)
@@ -966,38 +966,38 @@
 static VALUE
 rb_obj_trust_imp(VALUE obj, SEL sel)
 {
-    rb_secure(4);
-    if (!SPECIAL_CONST_P(obj) && NATIVE(obj)) {
-	switch (TYPE(obj)) {
-	    case T_SYMBOL:
-		break;
-
-	    case T_ARRAY:
-		if (rb_klass_is_rary(*(VALUE *)obj)) {
-		    RBASIC(obj)->flags &= ~FL_UNTRUSTED;
-		    break;
-		}
-		// fall through
-	    case T_STRING:
-		if (rb_klass_is_rstr(*(VALUE *)obj)) {
-		    RBASIC(obj)->flags &= ~FL_UNTRUSTED;
-		    break;
-		}
-		// fall through
-	    case T_HASH:
-		if (rb_klass_is_rhash(*(VALUE *)obj)) {
-		    RBASIC(obj)->flags &= ~FL_UNTRUSTED;
-		    break;
-		}
-	    default:
-		rb_objc_flag_set((const void *)obj, FL_UNTRUSTED, false);
-	}
-	return obj;
-    }
-    if (!OBJ_TAINTED(obj)) {
+    rb_secure(3);
+    if (OBJ_UNTRUSTED(obj)) {
 	if (OBJ_FROZEN(obj)) {
 	    rb_error_frozen("object");
 	}
+	if (!SPECIAL_CONST_P(obj) && NATIVE(obj)) {
+	    switch (TYPE(obj)) {
+		case T_SYMBOL:
+		    break;
+
+		case T_ARRAY:
+		    if (rb_klass_is_rary(*(VALUE *)obj)) {
+			RBASIC(obj)->flags &= ~FL_UNTRUSTED;
+			break;
+		    }
+		    // fall through
+		case T_STRING:
+		    if (rb_klass_is_rstr(*(VALUE *)obj)) {
+			RBASIC(obj)->flags &= ~FL_UNTRUSTED;
+			break;
+		    }
+		    // fall through
+		case T_HASH:
+		    if (rb_klass_is_rhash(*(VALUE *)obj)) {
+			RBASIC(obj)->flags &= ~FL_UNTRUSTED;
+			break;
+		    }
+		default:
+		    rb_objc_flag_set((const void *)obj, FL_UNTRUSTED, false);
+	    }
+	    return obj;
+	}
 	FL_UNSET(obj, FL_UNTRUSTED);
     }
     return obj;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20101221/9a909728/attachment-0001.html>


More information about the macruby-changes mailing list