Fail if prev frame is not done on new temp. delim.
Return an error if the frame in the previous temporal unit is incomplete
when a new temporal delimiter OBU is received.
Test:
test_libaom --gtest_filter=*InvalidFileTest*
BUG=oss-fuzz:24706
Change-Id: If19ac955c907fed1e77538ffa8adb7e88c8e7aec
diff --git a/av1/decoder/obu.c b/av1/decoder/obu.c
index 0c9cce4..161a33e 100644
--- a/av1/decoder/obu.c
+++ b/av1/decoder/obu.c
@@ -916,8 +916,12 @@
switch (obu_header.type) {
case OBU_TEMPORAL_DELIMITER:
decoded_payload_size = read_temporal_delimiter_obu();
- pbi->seen_frame_header = 0;
- pbi->next_start_tile = 0;
+ if (pbi->seen_frame_header) {
+ // A new temporal unit has started, but the frame in the previous
+ // temporal unit is incomplete.
+ cm->error.error_code = AOM_CODEC_CORRUPT_FRAME;
+ return -1;
+ }
break;
case OBU_SEQUENCE_HEADER:
decoded_payload_size = read_sequence_header_obu(pbi, &rb);
@@ -1008,7 +1012,10 @@
obu_header.type == OBU_FRAME);
if (cm->error.error_code != AOM_CODEC_OK) return -1;
is_first_tg_obu_received = 0;
- if (frame_decoding_finished) pbi->seen_frame_header = 0;
+ if (frame_decoding_finished) {
+ pbi->seen_frame_header = 0;
+ pbi->next_start_tile = 0;
+ }
pbi->num_tile_groups++;
break;
case OBU_METADATA:
diff --git a/test/invalid_file_test.cc b/test/invalid_file_test.cc
index 30880b2..1b48294 100644
--- a/test/invalid_file_test.cc
+++ b/test/invalid_file_test.cc
@@ -136,7 +136,8 @@
{ 1, "invalid-oss-fuzz-10389.ivf", "invalid-oss-fuzz-10389.ivf.res.2" },
{ 1, "invalid-oss-fuzz-11523.ivf", "invalid-oss-fuzz-11523.ivf.res.2" },
{ 4, "invalid-oss-fuzz-15363.ivf", NULL },
- { 1, "invalid-oss-fuzz-16437.ivf", NULL },
+ { 1, "invalid-oss-fuzz-16437.ivf", "invalid-oss-fuzz-16437.ivf.res.2" },
+ { 1, "invalid-oss-fuzz-24706.ivf", NULL },
#if CONFIG_AV1_HIGHBITDEPTH
// These test vectors contain 10-bit or 12-bit video.
{ 1, "invalid-oss-fuzz-9288.ivf", NULL },
diff --git a/test/test-data.sha1 b/test/test-data.sha1
index a328475..f814b02 100644
--- a/test/test-data.sha1
+++ b/test/test-data.sha1
@@ -38,6 +38,9 @@
d3964f9dad9f60363c81b688324d95b4ec7c8038 *invalid-oss-fuzz-15363.ivf.res
5b697360bf0f02de31bae9b8da78e93570958fa4 *invalid-oss-fuzz-16437.ivf
09d2af8dd22201dd8d48e5dcfcaed281ff9422c7 *invalid-oss-fuzz-16437.ivf.res
+d3964f9dad9f60363c81b688324d95b4ec7c8038 *invalid-oss-fuzz-16437.ivf.res.2
+e821070cea8eb687be102a1a118e0341c2e9df69 *invalid-oss-fuzz-24706.ivf
+d3964f9dad9f60363c81b688324d95b4ec7c8038 *invalid-oss-fuzz-24706.ivf.res
ccbe4081557eb44820a0e6337c4a094421826b9a *invalid-oss-fuzz-9288.ivf
67c54283fe1a26ccf02cc991e4f9a1eea3ac5e78 *invalid-oss-fuzz-9288.ivf.res
c0960f032484579f967881cc025b71cfd7a79ee1 *invalid-oss-fuzz-9463.ivf
diff --git a/test/test_data_util.cmake b/test/test_data_util.cmake
index 7a9da42..3a96a2f 100644
--- a/test/test_data_util.cmake
+++ b/test/test_data_util.cmake
@@ -557,6 +557,9 @@
"invalid-oss-fuzz-15363.ivf.res"
"invalid-oss-fuzz-16437.ivf"
"invalid-oss-fuzz-16437.ivf.res"
+ "invalid-oss-fuzz-16437.ivf.res.2"
+ "invalid-oss-fuzz-24706.ivf"
+ "invalid-oss-fuzz-24706.ivf.res"
"invalid-oss-fuzz-9288.ivf"
"invalid-oss-fuzz-9288.ivf.res"
"invalid-oss-fuzz-9463.ivf"