[macruby-changes] [4318] MacRuby/trunk/error.c
source_changes at macosforge.org
source_changes at macosforge.org
Tue Jul 6 15:27:25 PDT 2010
Revision: 4318
http://trac.macosforge.org/projects/ruby/changeset/4318
Author: lsansonetti at apple.com
Date: 2010-07-06 15:27:21 -0700 (Tue, 06 Jul 2010)
Log Message:
-----------
reduce/restore safe level when formatting an exception (since it may taint objects)
Modified Paths:
--------------
MacRuby/trunk/error.c
Modified: MacRuby/trunk/error.c
===================================================================
--- MacRuby/trunk/error.c 2010-07-04 12:32:27 UTC (rev 4317)
+++ MacRuby/trunk/error.c 2010-07-06 22:27:21 UTC (rev 4318)
@@ -1214,14 +1214,13 @@
if (OBJ_FROZEN(obj)) rb_error_frozen(rb_obj_classname(obj));
}
-VALUE
-rb_format_exception_message(VALUE exc)
+static VALUE
+format_message(VALUE exc)
{
+ CFMutableStringRef result = CFStringCreateMutable(NULL, 0);
VALUE message = rb_vm_call(exc, sel_registerName("message"), 0, NULL);
VALUE bt = rb_vm_call(exc, sel_registerName("backtrace"), 0, NULL);
- CFMutableStringRef result = CFStringCreateMutable(NULL, 0);
-
const long count = (bt != Qnil ? RARRAY_LEN(bt) : 0);
if (count > 0) {
for (long i = 0; i < count; i++) {
@@ -1239,11 +1238,26 @@
CFStringAppendFormat(result, NULL, CFSTR("%s (%s)\n"),
RSTRING_PTR(message), rb_class2name(*(VALUE *)exc));
}
-
CFMakeCollectable(result);
return (VALUE)result;
}
+static VALUE
+restore_level(VALUE lvl)
+{
+ rb_set_safe_level_force((int)lvl);
+ return Qnil;
+}
+
+VALUE
+rb_format_exception_message(VALUE exc)
+{
+ const int old_level = rb_safe_level();
+ rb_set_safe_level_force(0);
+
+ return rb_ensure(format_message, exc, restore_level, (VALUE)old_level);
+}
+
void
Init_syserr(void)
{
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100706/bd9d5c32/attachment.html>
More information about the macruby-changes
mailing list