- fixed a bug where the stack was restored incorrectly when the VM was not capable of properly restoring the stack (i.e. when an error occurred)
- fixed re-entrancy bugs when a nested VM call on the same context threw an error --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401373
This commit is contained in:
		
							parent
							
								
									b24a28d834
								
							
						
					
					
						commit
						eb0a4bda94
					
				@ -257,7 +257,7 @@ int BaseContext::Execute(uint32_t code_addr, cell_t *result)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	ctx->pushcount = 0;
 | 
						ctx->pushcount = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cell_t save_sp = ctx->sp;
 | 
						cell_t save_sp = ctx->sp + (pushcount * sizeof(cell_t));
 | 
				
			||||||
	cell_t save_hp = ctx->hp;
 | 
						cell_t save_hp = ctx->hp;
 | 
				
			||||||
	uint32_t n_idx = ctx->n_idx;
 | 
						uint32_t n_idx = ctx->n_idx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -285,7 +285,7 @@ int BaseContext::Execute(uint32_t code_addr, cell_t *result)
 | 
				
			|||||||
#if defined SOURCEMOD_BUILD
 | 
					#if defined SOURCEMOD_BUILD
 | 
				
			||||||
	if (err == SP_ERROR_NONE)
 | 
						if (err == SP_ERROR_NONE)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if ((ctx->sp - (cell_t)(pushcount * sizeof(cell_t))) != save_sp)
 | 
							if (ctx->sp != save_sp)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			g_DbgReporter.GenerateCodeError(this,
 | 
								g_DbgReporter.GenerateCodeError(this,
 | 
				
			||||||
				code_addr,
 | 
									code_addr,
 | 
				
			||||||
@ -313,6 +313,9 @@ int BaseContext::Execute(uint32_t code_addr, cell_t *result)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx->n_idx = n_idx;
 | 
						ctx->n_idx = n_idx;
 | 
				
			||||||
 | 
						ctx->n_err = SP_ERROR_NONE;
 | 
				
			||||||
 | 
						m_MsgCache[0] = '\0';
 | 
				
			||||||
 | 
						m_CustomMsg = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user