[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