mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Fix segmentation fault when Module#name returns non string value [Bug #17754]
				
					
				
			* Add test for NoMethodError#to_s does not segfault * Ensure no segfault even if Module#name is overridden
This commit is contained in:
		
							parent
							
								
									95d9fe9538
								
							
						
					
					
						commit
						0a544c0c35
					
				
				
				Notes:
				
					git
				
				2021-03-28 08:48:17 +09:00 
				
			
			Merged: https://github.com/ruby/ruby/pull/4328 Merged-By: nobu <nobu@ruby-lang.org>
					 2 changed files with 19 additions and 1 deletions
				
			
		
							
								
								
									
										4
									
								
								error.c
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								error.c
									
										
									
									
									
								
							|  | @ -1965,8 +1965,10 @@ name_err_mesg_to_str(VALUE obj) | |||
| 	    d = rb_protect(name_err_mesg_receiver_name, obj, &state); | ||||
| 	    if (state || d == Qundef || d == Qnil) | ||||
| 		d = rb_protect(rb_inspect, obj, &state); | ||||
| 	    if (state) | ||||
| 	    if (state) { | ||||
| 		rb_set_errinfo(Qnil); | ||||
| 	    } | ||||
| 	    d = rb_check_string_type(d); | ||||
| 	    if (NIL_P(d)) { | ||||
| 		d = rb_any_to_s(obj); | ||||
| 	    } | ||||
|  |  | |||
|  | @ -90,4 +90,20 @@ class TestNoMethodError < Test::Unit::TestCase | |||
|       str.__send__(id) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def test_to_s | ||||
|     pre = Module.new do | ||||
|       def name | ||||
|         BasicObject.new | ||||
|       end | ||||
|     end | ||||
|     mod = Module.new | ||||
|     mod.singleton_class.prepend(pre) | ||||
| 
 | ||||
|     err = assert_raise(NoMethodError) do | ||||
|       mod.this_method_does_not_exist | ||||
|     end | ||||
| 
 | ||||
|     assert_match(/undefined method.+this_method_does_not_exist.+for.+Module/, err.to_s) | ||||
|   end | ||||
| end | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Kenichi Kamiya
						Kenichi Kamiya