[FFmpeg-devel] [PATCH] tools/coverity: override av_dict_set

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Sat Jul 11 23:17:04 EEST 2020


Timo Rothenpieler:
> Coverity thinks av_dict_set frees the key and value parameter, because
> it has the (rarely used) option to do so, and it's not smart enough to
> figure out it depends on the flags parameter.
> So lets provide a custom implementation that does not free them.
> ---
>  tools/coverity.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/tools/coverity.c b/tools/coverity.c
> index 19a132a976..5e4eb19f39 100644
> --- a/tools/coverity.c
> +++ b/tools/coverity.c
> @@ -77,3 +77,12 @@ void *av_free(void *ptr) {
>      __coverity_mark_as_afm_freed__(ptr, "av_free");
>  }
>  
> +int av_dict_set(void **pm, const char *key, const char *value, int flags) {
> +    int has_memory;
> +    if (has_memory) {
> +        return 0;
> +    } else {
> +        return -1;
> +    }
> +}
> +
> 
1. Won't this lead to a use-of-uninitialized-value warning?
2. This is a trade-off, isn't it? Coverity will then think that all the
cases where the AV_DICT_DONT_STRDUP_* flags are used lead to leaks,
won't it? If so, this shoul be mentioned in the commit message.
3. Furthermore, this model does not actually set anything: pm is
unchanged. Given that av_dict_set is the only function that actually
allocates an AVDictionary, Coverity might infer that lots of
AVDictionary * are in fact NULL; this might lead it to think that
certain code is dead although it isn't. Is there a way we can just use
the ordinary implementation of av_dict_set, but without the
AV_DICT_DONT_STRDUP_* flags?

- Andreas


More information about the ffmpeg-devel mailing list