[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