avformat/options: log filename on open

The loglevel is choosen so that the main filename and any images of
multi image sequences are shown only at debug level to avoid
clutter.

This makes exploits in playlists more visible. As they would show
accesses to private/sensitive files

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Michael Niedermayer 2017-06-02 14:47:16 +02:00
parent 08213e0b79
commit 53e0d5d724
2 changed files with 13 additions and 1 deletions

View File

@ -102,6 +102,18 @@ static const AVClass av_format_context_class = {
static int io_open_default(AVFormatContext *s, AVIOContext **pb, static int io_open_default(AVFormatContext *s, AVIOContext **pb,
const char *url, int flags, AVDictionary **options) const char *url, int flags, AVDictionary **options)
{ {
int loglevel;
if (!strcmp(url, s->filename) ||
s->iformat && !strcmp(s->iformat->name, "image2") ||
s->oformat && !strcmp(s->oformat->name, "image2")
) {
loglevel = AV_LOG_DEBUG;
} else
loglevel = AV_LOG_INFO;
av_log(s, loglevel, "Opening \'%s\' for %s\n", url, flags & AVIO_FLAG_WRITE ? "writing" : "reading");
#if FF_API_OLD_OPEN_CALLBACKS #if FF_API_OLD_OPEN_CALLBACKS
FF_DISABLE_DEPRECATION_WARNINGS FF_DISABLE_DEPRECATION_WARNINGS
if (s->open_cb) if (s->open_cb)

View File

@ -533,6 +533,7 @@ int avformat_open_input(AVFormatContext **ps, const char *filename,
if ((ret = av_opt_set_dict(s, &tmp)) < 0) if ((ret = av_opt_set_dict(s, &tmp)) < 0)
goto fail; goto fail;
av_strlcpy(s->filename, filename ? filename : "", sizeof(s->filename));
if ((ret = init_input(s, filename, &tmp)) < 0) if ((ret = init_input(s, filename, &tmp)) < 0)
goto fail; goto fail;
s->probe_score = ret; s->probe_score = ret;
@ -570,7 +571,6 @@ int avformat_open_input(AVFormatContext **ps, const char *filename,
} }
s->duration = s->start_time = AV_NOPTS_VALUE; s->duration = s->start_time = AV_NOPTS_VALUE;
av_strlcpy(s->filename, filename ? filename : "", sizeof(s->filename));
/* Allocate private data. */ /* Allocate private data. */
if (s->iformat->priv_data_size > 0) { if (s->iformat->priv_data_size > 0) {