The scripthelper addon function ExecuteString doesn't handle context reference counting properly if Prepare returns an error code.
Instead of returning contexts retrieved using asIScriptEngine::RequestContext, it calls release:
// If no context was provided, request a new one from the engine
asIScriptContext *execCtx = ctx ? ctx : engine->RequestContext();
r = execCtx->Prepare(func);
if( r < 0 )
{
func->Release();
if( !ctx ) execCtx->Release();
return r;
}
Normal execution will handle this correctly:
if( !ctx ) engine->ReturnContext(execCtx);
it should use the latter method in both cases.