From a500b975a87174f1994cf497892c2529cf42e834 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Sun, 29 Mar 2020 05:03:56 +0200 Subject: avutil/opt: Don't use NULL for %s string in a log message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If one calls av_opt_set() with an incorrect string to set the value of an option of type AV_OPT_TYPE_VIDEO_RATE, the given string is used in a log message via %s. This also happens when the string is actually a nullpointer in which case using it for %s is forbidden. This commit changes this by erroring out early in case of a nullpointer. This also fixes a warning from GCC 9.2: "ā€˜%sā€™ directive argument is null [-Wformat-overflow=]" Reviewed-by: Anton Khirnov Signed-off-by: Andreas Rheinhardt --- libavutil/opt.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index a482febf5f..bf2562737b 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -330,12 +330,7 @@ static int set_string_image_size(void *obj, const AVOption *o, const char *val, static int set_string_video_rate(void *obj, const AVOption *o, const char *val, AVRational *dst) { - int ret; - if (!val) { - ret = AVERROR(EINVAL); - } else { - ret = av_parse_video_rate(dst, val); - } + int ret = av_parse_video_rate(dst, val); if (ret < 0) av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as video rate\n", val); return ret; @@ -473,7 +468,7 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags) return AVERROR_OPTION_NOT_FOUND; if (!val && (o->type != AV_OPT_TYPE_STRING && o->type != AV_OPT_TYPE_PIXEL_FMT && o->type != AV_OPT_TYPE_SAMPLE_FMT && - o->type != AV_OPT_TYPE_IMAGE_SIZE && o->type != AV_OPT_TYPE_VIDEO_RATE && + o->type != AV_OPT_TYPE_IMAGE_SIZE && o->type != AV_OPT_TYPE_DURATION && o->type != AV_OPT_TYPE_COLOR && o->type != AV_OPT_TYPE_CHANNEL_LAYOUT && o->type != AV_OPT_TYPE_BOOL)) return AVERROR(EINVAL); -- cgit v1.2.3