diff --git a/src/mod/formats/mod_shout/mod_shout.c b/src/mod/formats/mod_shout/mod_shout.c index 27bfcc5729..102a70e20d 100644 --- a/src/mod/formats/mod_shout/mod_shout.c +++ b/src/mod/formats/mod_shout/mod_shout.c @@ -876,6 +876,10 @@ static switch_status_t shout_file_read(switch_file_handle_t *handle, void *data, *len = 0; + if (!context || context->err) { + return SWITCH_STATUS_FALSE; + } + if (context->fd) { rb = decode_fd(context, data, bytes); } else { @@ -923,7 +927,16 @@ static switch_status_t shout_file_write(switch_file_handle_t *handle, void *data return SWITCH_STATUS_FALSE; } + if (context->err) { + return SWITCH_STATUS_FALSE; + } + if (context->shout && !context->shout_init) { + + if (!context->gfp) { + return SWITCH_STATUS_FALSE; + } + context->shout_init++; if (shout_open(context->shout) != SHOUTERR_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error opening stream: %s\n", shout_get_error(context->shout)); diff --git a/src/switch_core_file.c b/src/switch_core_file.c index 02cf503538..0c04c4c268 100644 --- a/src/switch_core_file.c +++ b/src/switch_core_file.c @@ -45,6 +45,11 @@ SWITCH_DECLARE(switch_status_t) switch_core_perform_file_open(const char *file, char stream_name[128] = ""; char *rhs = NULL; + if (switch_test_flag(fh, SWITCH_FILE_OPEN)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Handle already open\n"); + return SWITCH_STATUS_FALSE; + } + if (switch_strlen_zero(file_path)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Filename\n"); return SWITCH_STATUS_FALSE; @@ -140,6 +145,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_read(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; + } + top: if (fh->buffer && switch_buffer_inuse(fh->buffer) >= *len * 2) { @@ -253,6 +262,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_write(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_write) { return SWITCH_STATUS_FALSE; }