mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	eval.c: no overwrite SystemStackError backtrace
* eval.c (setup_exception): should not overwrite SystemStackError backtrace if set already. [ruby-core:63377] [Feature #6216] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									3ff85b795a
								
							
						
					
					
						commit
						fd4df3be5c
					
				
					 3 changed files with 16 additions and 7 deletions
				
			
		|  | @ -1,4 +1,7 @@ | |||
| Sat Jun 28 13:58:19 2014  Nobuyoshi Nakada  <nobu@ruby-lang.org> | ||||
| Sat Jun 28 13:58:48 2014  Nobuyoshi Nakada  <nobu@ruby-lang.org> | ||||
| 
 | ||||
| 	* eval.c (setup_exception): should not overwrite SystemStackError | ||||
| 	  backtrace if set already.  [ruby-core:63377] [Feature #6216] | ||||
| 
 | ||||
| 	* eval.c (setup_exception): get rid of method calls before raising | ||||
| 	  stack overflow, not to cause stack overflow again. | ||||
|  |  | |||
							
								
								
									
										14
									
								
								eval.c
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								eval.c
									
										
									
									
									
								
							|  | @ -493,13 +493,15 @@ setup_exception(rb_thread_t *th, int tag, volatile VALUE mesg, VALUE cause) | |||
|     if (file && !NIL_P(mesg)) { | ||||
| 	VALUE at; | ||||
| 	if (sysstack_error_p(mesg)) { | ||||
| 	    at = rb_vm_backtrace_object(); | ||||
| 	    if (mesg == sysstack_error) { | ||||
| 		VALUE ruby_vm_sysstack_error_copy(void); | ||||
| 		mesg = ruby_vm_sysstack_error_copy(); | ||||
| 	    if (NIL_P(rb_attr_get(mesg, idBt))) { | ||||
| 		at = rb_vm_backtrace_object(); | ||||
| 		if (mesg == sysstack_error) { | ||||
| 		    VALUE ruby_vm_sysstack_error_copy(void); | ||||
| 		    mesg = ruby_vm_sysstack_error_copy(); | ||||
| 		} | ||||
| 		rb_ivar_set(mesg, idBt, at); | ||||
| 		rb_ivar_set(mesg, idBt_locations, at); | ||||
| 	    } | ||||
| 	    rb_ivar_set(mesg, idBt, at); | ||||
| 	    rb_ivar_set(mesg, idBt_locations, at); | ||||
| 	} | ||||
| 	else if (NIL_P(get_backtrace(mesg))) { | ||||
| 	    at = rb_vm_backtrace_object(); | ||||
|  |  | |||
|  | @ -533,6 +533,10 @@ end.join | |||
|     e = assert_raise(SystemStackError, feature6216) {m} | ||||
|     level = e.backtrace.size | ||||
|     assert_operator(level, :>, 10, feature6216) | ||||
| 
 | ||||
|     feature6216 = '[ruby-core:63377] [Feature #6216]' | ||||
|     e = assert_raise(SystemStackError, feature6216) {raise e} | ||||
|     assert_equal(level, e.backtrace.size, feature6216) | ||||
|   end | ||||
| 
 | ||||
|   def test_machine_stackoverflow | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 nobu
						nobu