diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-07-17 07:26:45 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-07-17 07:26:45 +0000 |
commit | e2fd80b3d3b7f8ca7ffc2e7286fdb59e0c44bc79 (patch) | |
tree | 58bc2b44f4aed3cb90f5a1b45ea6ef25aff4ec52 /include | |
parent | 18f0a65018dd357a1815941618d3cf9f274e6239 (diff) | |
download | ruby-e2fd80b3d3b7f8ca7ffc2e7286fdb59e0c44bc79.tar.gz |
* error.c (rb_check_trusted): new function to check an object is
trusted.
* struct.c (rb_struct_modify), time.c (time_modify): check by the
above function to show proper class names. [Bug #5036]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32569 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'include')
-rw-r--r-- | include/ruby/intern.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/include/ruby/intern.h b/include/ruby/intern.h index da1c036740..41a41ea757 100644 --- a/include/ruby/intern.h +++ b/include/ruby/intern.h @@ -215,15 +215,24 @@ PRINTF_ARGS(void rb_compile_error_with_enc(const char*, int, void *, const char* PRINTF_ARGS(void rb_compile_error_append(const char*, ...), 1, 2); NORETURN(void rb_load_fail(const char*)); NORETURN(void rb_error_frozen(const char*)); +void rb_error_untrusted(VALUE); void rb_check_frozen(VALUE); +void rb_check_trusted(VALUE); #define rb_check_frozen_internal(obj) do { \ VALUE frozen_obj = (obj); \ if (OBJ_FROZEN(frozen_obj)) { \ rb_error_frozen(rb_obj_classname(frozen_obj)); \ } \ } while (0) +#define rb_check_trusted_internal(obj) do { \ + VALUE untrusted_obj = (obj); \ + if (!OBJ_UNTRUSTED(untrusted_obj)) { \ + rb_error_untrusted(untrusted_obj); \ + } \ + } while (0) #ifdef __GNUC__ #define rb_check_frozen(obj) __extension__({rb_check_frozen_internal(obj);}) +#define rb_check_trusted(obj) __extension__({rb_check_trusted_internal(obj);}) #else static inline void rb_check_frozen_inline(VALUE obj) @@ -231,6 +240,12 @@ rb_check_frozen_inline(VALUE obj) rb_check_frozen_internal(obj); } #define rb_check_frozen(obj) rb_check_frozen_inline(obj) +static inline void +rb_check_trusted_inline(VALUE obj) +{ + rb_check_trusted_internal(obj); +} +#define rb_check_trusted(obj) rb_check_trusted_inline(obj) #endif /* eval.c */ |