From: Dragos Oancea Date: Mon, 11 Nov 2019 19:02:21 +0000 (+0000) Subject: [mod_tts_commandline, mod_sndfile] fix crash on file not found X-Git-Tag: v1.10.2^2~72 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=60746cc07c72795a59b38a0be16b85e83a0ba9df;p=thirdparty%2Ffreeswitch.git [mod_tts_commandline, mod_sndfile] fix crash on file not found --- diff --git a/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c b/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c index 1d9906d0a9..a19af3a18d 100644 --- a/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c +++ b/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c @@ -186,13 +186,17 @@ static switch_status_t tts_commandline_speech_read_tts(switch_speech_handle_t *s assert(info != NULL); if (switch_core_file_read(info->fh, data, &my_datalen) != SWITCH_STATUS_SUCCESS) { - switch_core_file_close(info->fh); + if (switch_test_flag(info->fh, SWITCH_FILE_OPEN)) { + switch_core_file_close(info->fh); + } unlink(info->file); return SWITCH_STATUS_FALSE; } *datalen = my_datalen * 2; if (datalen == 0) { - switch_core_file_close(info->fh); + if (switch_test_flag(info->fh, SWITCH_FILE_OPEN)) { + switch_core_file_close(info->fh); + } unlink(info->file); return SWITCH_STATUS_BREAK; } else { @@ -205,7 +209,7 @@ static void tts_commandline_speech_flush_tts(switch_speech_handle_t *sh) tts_commandline_t *info = (tts_commandline_t *) sh->private_info; assert(info != NULL); - if (info->fh != NULL && info->fh->file_interface != NULL) { + if (info->fh != NULL && info->fh->file_interface != NULL && switch_test_flag(info->fh, SWITCH_FILE_OPEN)) { switch_core_file_close(info->fh); } if (switch_file_exists(info->file, NULL) == SWITCH_STATUS_SUCCESS) { diff --git a/src/mod/formats/mod_sndfile/mod_sndfile.c b/src/mod/formats/mod_sndfile/mod_sndfile.c index b9884c2138..a03e28af5c 100644 --- a/src/mod/formats/mod_sndfile/mod_sndfile.c +++ b/src/mod/formats/mod_sndfile/mod_sndfile.c @@ -267,7 +267,9 @@ static switch_status_t sndfile_file_close(switch_file_handle_t *handle) { sndfile_context *context = handle->private_info; - sf_close(context->handle); + if (context) { + sf_close(context->handle); + } return SWITCH_STATUS_SUCCESS; }