diff --git a/ChangeLog b/ChangeLog index 001a77951d..8e055629cb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Dec 1 23:14:04 2015 Nobuyoshi Nakada + + * thread.c (rb_thread_setname): check the argument if valid + string. [ruby-core:71774] [Bug #11756] + Tue Dec 1 17:13:41 2015 Nobuyoshi Nakada * string.c (rb_string_value_cstr): should not raise on frozen diff --git a/test/ruby/test_thread.rb b/test/ruby/test_thread.rb index d076494cdf..78ed329274 100644 --- a/test/ruby/test_thread.rb +++ b/test/ruby/test_thread.rb @@ -1057,4 +1057,22 @@ q.pop t.kill t.join end + + def test_thread_invalid_name + bug11756 = '[ruby-core:71774] [Bug #11756]' + t = Thread.start {} + assert_raise(ArgumentError, bug11756) {t.name = "foo\0bar"} + ensure + t.kill + t.join + end + + def test_thread_invalid_object + bug11756 = '[ruby-core:71774] [Bug #11756]' + t = Thread.start {} + assert_raise(TypeError, bug11756) {t.name = nil} + ensure + t.kill + t.join + end end diff --git a/thread.c b/thread.c index 7190a943bd..62713e80aa 100644 --- a/thread.c +++ b/thread.c @@ -2776,6 +2776,7 @@ rb_thread_setname(VALUE thread, VALUE name) { rb_thread_t *th; GetThreadPtr(thread, th); + StringValueCStr(name); th->name = rb_str_new_frozen(name); #if defined(HAVE_PTHREAD_SETNAME_NP) # if defined(__linux__)