diff options
author | Aaron <aaron@10gen.com> | 2010-10-06 00:33:09 -0700 |
---|---|---|
committer | Aaron <aaron@10gen.com> | 2010-10-06 00:33:09 -0700 |
commit | e593c1fe4cee859464f35559cac2b6d38615505c (patch) | |
tree | 5722c081e5755e75b8e85599b04d9456aa8c9136 /scripting | |
parent | 2c041513a0bdbbfd696d43bd58e95adbc946c9bc (diff) | |
download | mongo-e593c1fe4cee859464f35559cac2b6d38615505c.tar.gz |
SERVER-1841 don't allow client js to catch timeout/interrupt
Diffstat (limited to 'scripting')
-rw-r--r-- | scripting/engine_spidermonkey.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/scripting/engine_spidermonkey.cpp b/scripting/engine_spidermonkey.cpp index c949ddbb3be..048808fbb3a 100644 --- a/scripting/engine_spidermonkey.cpp +++ b/scripting/engine_spidermonkey.cpp @@ -1352,13 +1352,15 @@ namespace mongo { int count; }; + // should not generate exceptions, as those can be caught in + // javascript code; returning false without an exception exits + // immediately static JSBool _interrupt( JSContext *cx ){ TimeoutSpec &spec = *(TimeoutSpec *)( JS_GetContextPrivate( cx ) ); if ( ++spec.count % 1000 != 0 ) return JS_TRUE; const char * interrupt = ScriptEngine::checkInterrupt(); if ( interrupt && interrupt[ 0 ] ) { - JS_ReportError( cx, interrupt ); return JS_FALSE; } if ( spec.timeout.ticks() == 0 ) { @@ -1368,7 +1370,6 @@ namespace mongo { if ( elapsed < spec.timeout ) { return JS_TRUE; } - JS_ReportError( cx, "Timeout exceeded" ); return JS_FALSE; } |