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