From b6beb8d943761fe1d754ba4de5ba360018b8e767 Mon Sep 17 00:00:00 2001 From: matz Date: Sat, 25 Oct 2003 00:36:56 +0000 Subject: * eval.c (rb_method_missing): protect exception from within "inspect". (ruby-bugs PR#1204) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ eval.c | 13 ++++++++----- version.h | 12 ++++++------ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 57abeb74b9..ee8d2650dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Oct 25 09:18:04 2003 Yukihiro Matsumoto + + * eval.c (rb_method_missing): protect exception from within + "inspect". (ruby-bugs PR#1204) + Fri Oct 24 23:26:34 2003 Yukihiro Matsumoto * hash.c (rb_hash_each): Hash#each should yield single value. diff --git a/eval.c b/eval.c index 5961e1ec62..06590c0dde 100644 --- a/eval.c +++ b/eval.c @@ -4716,6 +4716,7 @@ rb_method_missing(argc, argv, obj) char *format = 0; char *desc = ""; NODE *cnode = ruby_current_node; + int state; if (argc == 0 || !SYMBOL_P(argv[0])) { rb_raise(rb_eArgError, "no id given"); @@ -4725,6 +4726,7 @@ rb_method_missing(argc, argv, obj) id = SYM2ID(argv[0]); + switch (TYPE(obj)) { case T_NIL: desc = "nil"; @@ -4736,16 +4738,17 @@ rb_method_missing(argc, argv, obj) desc = "false"; break; default: - if (rb_respond_to(obj, rb_intern("inspect"))) + PUSH_TAG(PROT_NONE); + if ((state = EXEC_TAG()) == 0) { d = rb_inspect(obj); - else + } + POP_TAG(); + if (!d || RSTRING(d)->len > 65) { d = rb_any_to_s(obj); + } break; } if (d) { - if (RSTRING(d)->len > 65) { - d = rb_any_to_s(obj); - } desc = RSTRING(d)->ptr; } diff --git a/version.h b/version.h index c8bd4b41fd..9408ca7530 100644 --- a/version.h +++ b/version.h @@ -1,11 +1,11 @@ -#define RUBY_VERSION "1.8.0" -#define RUBY_RELEASE_DATE "2003-10-24" -#define RUBY_VERSION_CODE 180 -#define RUBY_RELEASE_CODE 20031024 +#define RUBY_VERSION "1.8.1" +#define RUBY_RELEASE_DATE "2003-10-25" +#define RUBY_VERSION_CODE 181 +#define RUBY_RELEASE_CODE 20031025 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 8 -#define RUBY_VERSION_TEENY 0 +#define RUBY_VERSION_TEENY 1 #define RUBY_RELEASE_YEAR 2003 #define RUBY_RELEASE_MONTH 10 -#define RUBY_RELEASE_DAY 24 +#define RUBY_RELEASE_DAY 25 -- cgit v1.2.3