diff options
author | mnicholson <mnicholson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-11-24 21:27:26 +0000 |
---|---|---|
committer | mnicholson <mnicholson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-11-24 21:27:26 +0000 |
commit | 2c81341cfb92be4a3cc63699fd1f715aa20c9887 (patch) | |
tree | c1bb9aefecc096fa18c8596b3d4bdf215c64db56 /main/file.c | |
parent | 47da39a455232dca1de9d8485e5bcb0f5eb148f4 (diff) |
Make ast_streamfile() check the result of ast_openstream() before doing
anything with it.
(closes issue #13955)
Reported by: chris-mac
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@158851 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/file.c')
-rw-r--r-- | main/file.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/main/file.c b/main/file.c index 488500e1d..79c5c1bf2 100644 --- a/main/file.c +++ b/main/file.c @@ -900,6 +900,10 @@ int ast_streamfile(struct ast_channel *chan, const char *filename, const char *p int seekattempt; fs = ast_openstream(chan, filename, preflang); + if (!fs) { + ast_log(LOG_WARNING, "Unable to open %s (format %s): %s\n", filename, ast_getformatname_multiple(fmt, sizeof(fmt), chan->nativeformats), strerror(errno)); + return -1; + } /* check to see if there is any data present (not a zero length file), * done this way because there is no where for ast_openstream_full to @@ -910,28 +914,24 @@ int ast_streamfile(struct ast_channel *chan, const char *filename, const char *p else return 0; - if (fs) - vfs = ast_openvstream(chan, filename, preflang); + vfs = ast_openvstream(chan, filename, preflang); if (vfs) { ast_debug(1, "Ooh, found a video stream, too, format %s\n", ast_getformatname(vfs->fmt->format)); } - if (fs){ - int res; - if (ast_test_flag(chan, AST_FLAG_MASQ_NOSTREAM)) - fs->orig_chan_name = ast_strdup(chan->name); - if (ast_applystream(chan, fs)) - return -1; - if (vfs && ast_applystream(chan, vfs)) - return -1; - res = ast_playstream(fs); - if (!res && vfs) - res = ast_playstream(vfs); - ast_verb(3, "<%s> Playing '%s.%s' (language '%s')\n", chan->name, filename, ast_getformatname(chan->writeformat), preflang ? preflang : "default"); - return res; - } - ast_log(LOG_WARNING, "Unable to open %s (format %s): %s\n", filename, ast_getformatname_multiple(fmt, sizeof(fmt), chan->nativeformats), strerror(errno)); - return -1; + int res; + if (ast_test_flag(chan, AST_FLAG_MASQ_NOSTREAM)) + fs->orig_chan_name = ast_strdup(chan->name); + if (ast_applystream(chan, fs)) + return -1; + if (vfs && ast_applystream(chan, vfs)) + return -1; + res = ast_playstream(fs); + if (!res && vfs) + res = ast_playstream(vfs); + ast_verb(3, "<%s> Playing '%s.%s' (language '%s')\n", chan->name, filename, ast_getformatname(chan->writeformat), preflang ? preflang : "default"); + + return res; } struct ast_filestream *ast_readfile(const char *filename, const char *type, const char *comment, int flags, int check, mode_t mode) |