[FFmpeg-devel] [PATCH] avutil/error: Provide better feedback about unknown error codes

Marton Balint cus at passwd.hu
Mon Jul 15 18:45:24 EEST 2024



On Mon, 15 Jul 2024, Andrew Sayers wrote:

> AVERROR messages should always be less than zero,
> and are usually based on three or four ASCII characters.
>
> For error codes that aren't explicitly handled by error.c (e.g. FFERROR_REDO),
> print the ASCII code so the user has a little more information.

All ffmpeg internal error codes (including the ones having some special 
tag representation) should be handled by error.c. The user should never 
receive FFERROR_REDO, that is an internal error code, it should never 
reach the user. Therefore I see no benefit in disclosing the error bytes, 
because that is not the proper fix.

Regards,
Marton


>
> If a non-negative number somehow gets passed to this function,
> print a message saying this shouldn't happen.
> ---
> libavutil/error.c | 32 ++++++++++++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/libavutil/error.c b/libavutil/error.c
> index 90bab7b9d3..c40b54b1f9 100644
> --- a/libavutil/error.c
> +++ b/libavutil/error.c
> @@ -119,6 +119,38 @@ int av_strerror(int errnum, char *errbuf, size_t errbuf_size)
>     }
>     if (entry) {
>         av_strlcpy(errbuf, entry->str, errbuf_size);
> +    } else if (
> +        -errnum <= 0xFFFFFFFF
> +        && ((-errnum >>  0) & 0xFF) >= 0x20 && ((-errnum >>  0) & 0xFF) <= 0x7F
> +        && ((-errnum >>  8) & 0xFF) >= 0x20 && ((-errnum >>  8) & 0xFF) <= 0x7F
> +        && ((-errnum >> 16) & 0xFF) >= 0x20 && ((-errnum >> 16) & 0xFF) <= 0x7F
> +        && (
> +           (((-errnum >> 24) & 0xFF) >= 0x20 && ((-errnum >> 24) & 0xFF) <= 0x7F)
> +           || !((-errnum >> 24) & 0xFF)
> +        )
> +    ) {
> +        if ((-errnum >> 24) & 0xFF) {
> +            snprintf(
> +                errbuf,
> +                errbuf_size,
> +                "Unrecognised error code \"%c%c%c%c\" occurred",
> +                (-errnum >>  0) & 0xFF,
> +                (-errnum >>  8) & 0xFF,
> +                (-errnum >> 16) & 0xFF,
> +                (-errnum >> 24) & 0xFF
> +            );
> +        } else {
> +            snprintf(
> +                errbuf,
> +                errbuf_size,
> +                "Unrecognised error code \"%c%c%c\" occurred",
> +                (-errnum >>  0) & 0xFF,
> +                (-errnum >>  8) & 0xFF,
> +                (-errnum >> 16) & 0xFF
> +            );
> +        }
> +    } else if (errnum >= 0) {
> +        snprintf(errbuf, errbuf_size, "Impossible: non-negative error number %d occurred", errnum);
>     } else {
> #if HAVE_STRERROR_R
>         ret = AVERROR(strerror_r(AVUNERROR(errnum), errbuf, errbuf_size));
> -- 
> 2.45.2
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>


More information about the ffmpeg-devel mailing list