diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-04 19:12:52 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-04 19:12:52 +0000 |
| commit | 9f62fce28ee0cbc095b8b0aab0d55b8c88841f26 (patch) | |
| tree | 005e4eec64df8bff6830e144d18c54f57cccc1b0 /eval.c | |
| parent | ecce8e25947f8bbd587a13acf088c3460563e5ae (diff) | |
| download | ruby-9f62fce28ee0cbc095b8b0aab0d55b8c88841f26.tar.gz ruby-9f62fce28ee0cbc095b8b0aab0d55b8c88841f26.tar.xz ruby-9f62fce28ee0cbc095b8b0aab0d55b8c88841f26.zip | |
* eval.c (rb_frame_callee): check if prev_cfp can be accessible.
a patch from Yoshinori Sano <yoshinori.sano at gmail.com> in
[ruby-dev:30252]. solves [ruby-dev:30200] and [ruby-core:9856].
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@11628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
| -rw-r--r-- | eval.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -1879,7 +1879,13 @@ rb_frame_this_func(void) ID rb_frame_callee(void) { - return frame_func_id(GET_THREAD()->cfp + 1); + yarv_thread_t *th = GET_THREAD(); + yarv_control_frame_t *prev_cfp = YARV_PREVIOUS_CONTROL_FRAME(th->cfp); + /* check if prev_cfp can be accessible */ + if ((void *)(th->stack + th->stack_size) == (void *)(prev_cfp)) { + return 0; + } + return frame_func_id(prev_cfp); } void |
