From: Anthony Minessale Date: Fri, 5 Apr 2013 19:27:17 +0000 (-0500) Subject: FS-5216 don't allow recursive call to speek X-Git-Tag: v1.2.9~73 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=82bbb45d96a516e2f4256c9ae4eddd97e7fae04f;p=thirdparty%2Ffreeswitch.git FS-5216 don't allow recursive call to speek --- diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c index 7c2928db4c..e6ab03b4d7 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c @@ -1968,6 +1968,12 @@ static JSBool session_speak(JSContext * cx, JSObject * obj, uintN argc, jsval * return JS_FALSE; } + if (jss->speech && jss->speech->speaking) { + eval_some_js("~throw new Error(\"Recursive call not allowed\");", cx, obj, rval); + return JS_FALSE; + } + + if (jss->speech && strcasecmp(jss->speech->sh.name, tts_name)) { destroy_speech_engine(jss); } @@ -2009,7 +2015,9 @@ static JSBool session_speak(JSContext * cx, JSObject * obj, uintN argc, jsval * switch_core_speech_flush_tts(&jss->speech->sh); if (switch_core_codec_ready(&jss->speech->codec)) { + jss->speech->speaking = 1; switch_ivr_speak_text_handle(jss->session, &jss->speech->sh, &jss->speech->codec, NULL, text, &args); + jss->speech->speaking = 0; } JS_ResumeRequest(cx, cb_state.saveDepth); check_hangup_hook(jss, &ret);