From ea88aed04bdb2110347b2c4aedd2e66ad2c71e6e Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 23 Feb 2009 19:52:29 +0000 Subject: [PATCH] avoid operations on closed file handles in embedded languages git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12255 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- .../languages/mod_spidermonkey/mod_spidermonkey.c | 4 ++++ src/switch_core_file.c | 12 ++++++++++++ src/switch_cpp.cpp | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c index 9e4f03a267..d2e9cebc11 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c @@ -1190,6 +1190,10 @@ static switch_status_t js_stream_input_callback(switch_core_session_t *session, switch_file_handle_t *fh = cb_state->extra; struct js_session *jss = cb_state->session_state; + if (!switch_test_flag(fh, SWITCH_FILE_OPEN)) { + return SWITCH_STATUS_FALSE; + } + if ((status = js_common_callback(session, input, itype, buf, buflen)) != SWITCH_STATUS_SUCCESS) { return status; } diff --git a/src/switch_core_file.c b/src/switch_core_file.c index 659ed0ba4d..8cf75089cb 100644 --- a/src/switch_core_file.c +++ b/src/switch_core_file.c @@ -332,6 +332,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_seek(switch_file_handle_t *fh, switch_assert(fh != NULL); switch_assert(fh->file_interface != NULL); + if (!switch_test_flag(fh, SWITCH_FILE_OPEN)) { + return SWITCH_STATUS_FALSE; + } + if (!fh->file_interface->file_seek) { return SWITCH_STATUS_FALSE; } @@ -349,6 +353,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_set_string(switch_file_handle_t switch_assert(fh != NULL); switch_assert(fh->file_interface != NULL); + if (!switch_test_flag(fh, SWITCH_FILE_OPEN)) { + return SWITCH_STATUS_FALSE; + } + if (!fh->file_interface->file_set_string) { return SWITCH_STATUS_FALSE; } @@ -361,6 +369,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_get_string(switch_file_handle_t switch_assert(fh != NULL); switch_assert(fh->file_interface != NULL); + if (!switch_test_flag(fh, SWITCH_FILE_OPEN)) { + return SWITCH_STATUS_FALSE; + } + if (!fh->file_interface->file_get_string) { return SWITCH_STATUS_FALSE; } diff --git a/src/switch_cpp.cpp b/src/switch_cpp.cpp index b269f6b966..f56eb1ef6f 100644 --- a/src/switch_cpp.cpp +++ b/src/switch_cpp.cpp @@ -1207,6 +1207,10 @@ SWITCH_DECLARE(switch_status_t) CoreSession::process_callback_result(char *resul } if (fhp) { + if (!switch_test_flag(fhp, SWITCH_FILE_OPEN)) { + return SWITCH_STATUS_FALSE; + } + if (!strncasecmp(result, "speed", 5)) { char *p;