summaryrefslogtreecommitdiff
path: root/scripting
diff options
context:
space:
mode:
authorAaron <aaron@10gen.com>2010-10-06 00:33:09 -0700
committerAaron <aaron@10gen.com>2010-10-06 00:33:09 -0700
commite593c1fe4cee859464f35559cac2b6d38615505c (patch)
tree5722c081e5755e75b8e85599b04d9456aa8c9136 /scripting
parent2c041513a0bdbbfd696d43bd58e95adbc946c9bc (diff)
downloadmongo-e593c1fe4cee859464f35559cac2b6d38615505c.tar.gz
SERVER-1841 don't allow client js to catch timeout/interrupt
Diffstat (limited to 'scripting')
-rw-r--r--scripting/engine_spidermonkey.cpp5
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;
}