[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