[FFmpeg-devel] [PATCH] avutil/error: Provide better feedback about unknown error codes
Andrew Sayers
ffmpeg-devel at pileofstuff.org
Mon Jul 15 18:13:19 EEST 2024
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.
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
More information about the ffmpeg-devel
mailing list