Commit ba8604f8be for ffmpeg
commit ba8604f8be37637f8fab574ddc8ba6b9e459f9dc
Author: Kacper Michajłow <kasper93@gmail.com>
Date: Tue Sep 22 18:34:18 2026 +0200
avutil/tests/utf8: decode built-in sequences when no file is given
The test required an input file and FATE has no stable one to feed it.
Cover valid, overlong, surrogate, non-character, out-of-range,
truncated and stray-continuation cases from a built-in table instead.
Signed-off-by: Kacper Michajłow <kasper93@gmail.com>
diff --git a/libavutil/tests/utf8.c b/libavutil/tests/utf8.c
index 37a2802b5f..6046c8cc71 100644
--- a/libavutil/tests/utf8.c
+++ b/libavutil/tests/utf8.c
@@ -23,6 +23,23 @@
#include "libavutil/avstring.h"
#include "libavutil/file.h"
+static const uint8_t vectors[] =
+ "A\n"
+ "\xC3\xA9\n" /* U+00E9 */
+ "\xE2\x82\xAC\n" /* U+20AC */
+ "\xF0\x9F\x98\x80\n" /* U+1F600 */
+ "\xF4\x8F\xBF\xBF\n" /* U+10FFFF */
+ "\xF4\x90\x80\x80\n" /* U+110000 */
+ "\xF8\x88\x80\x80\x80\n" /* 5 byte form of U+200000 */
+ "\xC0\x80\n" /* overlong NUL */
+ "\xE0\x80\x80\n" /* overlong NUL */
+ "\xED\xA0\x80\n" /* U+D800 surrogate */
+ "\xEF\xBF\xBF\n" /* U+FFFF */
+ "\x80\n" /* stray continuation */
+ "\xFE\n" /* invalid lead byte */
+ "\xC3" "A\n" /* missing continuation */
+ "\xE2\x82"; /* truncated */
+
static void print_sequence(const char *p, int l, int indent)
{
int i;
@@ -31,21 +48,10 @@ static void print_sequence(const char *p, int l, int indent)
printf("%*s", indent-l*2, "");
}
-int main(int argc, char **argv)
+static void decode(const uint8_t *p, const uint8_t *endp)
{
- int ret;
- char *filename = argv[1];
- uint8_t *file_buf;
- size_t file_buf_size;
uint32_t code;
- const uint8_t *p, *endp;
- ret = av_file_map(filename, &file_buf, &file_buf_size, 0, NULL);
- if (ret < 0)
- return 1;
-
- p = file_buf;
- endp = file_buf + file_buf_size;
while (p < endp) {
int l, r;
const uint8_t *p0 = p;
@@ -65,7 +71,21 @@ int main(int argc, char **argv)
printf("invalid sequence\n");
}
}
+}
+
+int main(int argc, char **argv)
+{
+ if (argc > 1) {
+ uint8_t *file_buf;
+ size_t file_buf_size;
+ int ret = av_file_map(argv[1], &file_buf, &file_buf_size, 0, NULL);
+ if (ret < 0)
+ return 1;
+ decode(file_buf, file_buf + file_buf_size);
+ av_file_unmap(file_buf, file_buf_size);
+ } else {
+ decode(vectors, vectors + sizeof(vectors) - 1);
+ }
- av_file_unmap(file_buf, file_buf_size);
return 0;
}