Tune rtp_frame_reference_finder_fuzzer to create valid VP8 headers

To avoid testing with values that is not possible to receive over the
wire.

Bug: chromium:533920878
Change-Id: Ia26960c21d9962b0a498d258effadec0bc335239
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/490861
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#48221}
diff --git a/test/fuzzers/rtp_frame_reference_finder_fuzzer.cc b/test/fuzzers/rtp_frame_reference_finder_fuzzer.cc
index 71e0ced..9b2552e 100644
--- a/test/fuzzers/rtp_frame_reference_finder_fuzzer.cc
+++ b/test/fuzzers/rtp_frame_reference_finder_fuzzer.cc
@@ -89,6 +89,36 @@
 
   return result;
 }
+
+RTPVideoHeaderVP8 FuzzVp8Header(DataReader& fuzz_data) {
+  RTPVideoHeaderVP8 result;
+  result.InitRTPVideoHeaderVP8();
+
+  // Fuzz VP8 header with the respect of possible range of each value which is
+  // narrower than underlying c++ type.
+  // See https://datatracker.ietf.org/doc/html/rfc7741#section-4.2 what range
+  // each field supports.
+  uint8_t flags = fuzz_data.GetNum<uint8_t>();
+  result.partitionId = flags & 0b0000'0111;
+  result.beginningOfPartition = (flags & 0b0000'1000) != 0;
+
+  result.nonReference = (flags & 0b0001'0000) != 0;
+  if (flags & 0b0010'0000) {
+    result.pictureId = fuzz_data.GetNum<int16_t>() & 0x7FFF;  // 15 bits
+  }
+  if (flags & 0b0100'0000) {
+    result.tl0PicIdx = fuzz_data.GetNum<uint8_t>();
+  }
+  if (flags & 0b1000'0000) {
+    uint8_t tk_octet = fuzz_data.GetNum<uint8_t>();
+    result.temporalIdx = (tk_octet & 0b1100'0000) >> 6;
+    result.layerSync = (tk_octet & 0b0010'0000) != 0;
+    result.keyIdx = (tk_octet & 0b0001'1111);
+  }
+
+  return result;
+}
+
 }  // namespace
 
 void FuzzOneInput(FuzzDataHelper fuzz_data) {
@@ -117,8 +147,7 @@
 
     switch (codec) {
       case kVideoCodecVP8:
-        reader.CopyTo(
-            video_header.video_type_header.emplace<RTPVideoHeaderVP8>());
+        video_header.video_type_header = FuzzVp8Header(reader);
         break;
       case kVideoCodecVP9:
         reader.CopyTo(