summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--numeric.c4
2 files changed, 8 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index bbfc75eb3f..e6e2190bbb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Oct 18 14:40:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_sadded): remove newly defined singleton method
+ that should not exist after exception handling. [ruby-dev:36569]
+
Sat Oct 18 13:30:53 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* string.c (rb_external_str_new): a new function to convert from
diff --git a/numeric.c b/numeric.c
index 06351eca31..042e0c306f 100644
--- a/numeric.c
+++ b/numeric.c
@@ -202,11 +202,13 @@ rb_num_coerce_relop(VALUE x, VALUE y, ID func)
static VALUE
num_sadded(VALUE x, VALUE name)
{
+ const char *nstr = rb_id2name(rb_to_id(name));
/* ruby_frame = ruby_frame->prev; */ /* pop frame for "singleton_method_added" */
/* Numerics should be values; singleton_methods should not be added to them */
+ rb_remove_method(rb_singleton_class(x), nstr);
rb_raise(rb_eTypeError,
"can't define singleton method \"%s\" for %s",
- rb_id2name(rb_to_id(name)),
+ nstr,
rb_obj_classname(x));
return Qnil; /* not reached */
}