eval_intern.h: make TH_PUSH_TAG() initialize rb_vm_tag::tag with Qundef
* eval_intern.h (TH_PUSH_TAG): Initialize struct rb_vm_tag::tag with Qundef rather than 0 which is equal to Qfalse. Since Kernel#throw(obj) searches a tag with rb_vm_tag::tag == obj, throw(false) can accidentally find an unrelated tag which is not created by Kernel#catch. [ruby-core:77229] [Bug #12743] * test/ruby/test_exception.rb (test_throw_false): Add a test case for this. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56252 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
64f53f0dbf
commit
ed5a926b13
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
Mon Sep 26 15:43:34 2016 Kazuki Yamaguchi <k@rhe.jp>
|
||||||
|
|
||||||
|
* eval_intern.h (TH_PUSH_TAG): Initialize struct rb_vm_tag::tag with
|
||||||
|
Qundef rather than 0 which is equal to Qfalse. Since Kernel#throw(obj)
|
||||||
|
searches a tag with rb_vm_tag::tag == obj, throw(false) can
|
||||||
|
accidentally find an unrelated tag which is not created by
|
||||||
|
Kernel#catch. [ruby-core:77229] [Bug #12743]
|
||||||
|
|
||||||
|
* test/ruby/test_exception.rb (test_throw_false): Add a test case for
|
||||||
|
this.
|
||||||
|
|
||||||
Mon Sep 26 14:36:12 2016 Naotoshi Seo <sonots@gmail.com>
|
Mon Sep 26 14:36:12 2016 Naotoshi Seo <sonots@gmail.com>
|
||||||
|
|
||||||
* lib/tempfile.rb: provide default basename parameter for
|
* lib/tempfile.rb: provide default basename parameter for
|
||||||
|
@ -131,7 +131,7 @@ LONG WINAPI rb_w32_stack_overflow_handler(struct _EXCEPTION_POINTERS *);
|
|||||||
#define TH_PUSH_TAG(th) do { \
|
#define TH_PUSH_TAG(th) do { \
|
||||||
rb_thread_t * const _th = (th); \
|
rb_thread_t * const _th = (th); \
|
||||||
struct rb_vm_tag _tag; \
|
struct rb_vm_tag _tag; \
|
||||||
_tag.tag = 0; \
|
_tag.tag = Qundef; \
|
||||||
_tag.prev = _th->tag;
|
_tag.prev = _th->tag;
|
||||||
|
|
||||||
#define TH_POP_TAG() \
|
#define TH_POP_TAG() \
|
||||||
|
@ -181,6 +181,15 @@ class TestException < Test::Unit::TestCase
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_throw_false
|
||||||
|
bug12743 = '[ruby-core:77229] [Bug #12743]'
|
||||||
|
assert_raise_with_message(UncaughtThrowError, /false/, bug12743) {
|
||||||
|
Thread.start {
|
||||||
|
throw false
|
||||||
|
}.join
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def test_else_no_exception
|
def test_else_no_exception
|
||||||
begin
|
begin
|
||||||
assert(true)
|
assert(true)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user