]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[mod_tts_commandline, mod_sndfile] fix crash on file not found
authorDragos Oancea <dragos@signalwire.com>
Mon, 11 Nov 2019 19:02:21 +0000 (19:02 +0000)
committerAndrey Volk <andywolk@gmail.com>
Mon, 11 Nov 2019 19:02:21 +0000 (23:02 +0400)
src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c
src/mod/formats/mod_sndfile/mod_sndfile.c

index 1d9906d0a935f3993e9e9bdb47d001ddd8d5db25..a19af3a18d9a128d51907cdaebaedc8f8e5bcfd4 100644 (file)
@@ -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) {
index b9884c2138bcc542d78748d480c5796b9d95f125..a03e28af5c339bb7de14b28ca57980c7f0e88c0e 100644 (file)
@@ -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;
 }