aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--error.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 40ab2d9011..23f4e680d4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Jun 23 14:32:42 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (name_err_receiver): raise ArgumentError if no receiver
+ is available on this exception object. [Feature #10881]
+
Tue Jun 23 09:48:34 2015 Eric Wong <e@80x24.org>
* dir.c (check_dirname): avoid volatile, use return value
diff --git a/error.c b/error.c
index b668375a55..70ebe6bb67 100644
--- a/error.c
+++ b/error.c
@@ -1264,7 +1264,10 @@ name_err_receiver(VALUE self)
{
VALUE *ptr, mesg = rb_attr_get(self, id_mesg);
- TypedData_Get_Struct(mesg, VALUE, &name_err_mesg_data_type, ptr);
+ if (!rb_typeddata_is_kind_of(mesg, &name_err_mesg_data_type)) {
+ rb_raise(rb_eArgError, "no receiver is available");
+ }
+ ptr = DATA_PTR(mesg);
return ptr[NAME_ERR_MESG__RECV];
}