Skip a copy of the frame header in the bit buffer.

Move rb.bit_offset for subsequent frame_header_obu's so that 'rb' is
aligned with the beginning of tile_group_obu for a frame_obu.

BUG=oss-fuzz:9482

Change-Id: I691a9640502487bd8c62d385ef616b8c95c27719
(cherry picked from commit 3bffe09a53d3138c13c91d4f73865fd6baf07d5f)
diff --git a/av1/decoder/obu.c b/av1/decoder/obu.c
index 03d43a2..4d33e5a 100644
--- a/av1/decoder/obu.c
+++ b/av1/decoder/obu.c
@@ -780,7 +780,7 @@
   AV1_COMMON *const cm = &pbi->common;
   int frame_decoding_finished = 0;
   int is_first_tg_obu_received = 1;
-  int frame_header_size = 0;
+  uint32_t frame_header_size = 0;
   int seq_header_received = 0;
   size_t seq_header_size = 0;
   ObuHeader obu_header;
@@ -878,9 +878,19 @@
           pbi->seen_frame_header = 1;
           if (!pbi->ext_tile_debug && cm->large_scale_tile)
             pbi->camera_frame_header_ready = 1;
+        } else {
+          // TODO(wtc): Verify that the frame_header_obu is identical to the
+          // original frame_header_obu. For now just skip frame_header_size
+          // bytes in the bit buffer.
+          if (frame_header_size > payload_size) {
+            cm->error.error_code = AOM_CODEC_CORRUPT_FRAME;
+            return -1;
+          }
+          assert(rb.bit_offset == 0);
+          rb.bit_offset = 8 * frame_header_size;
         }
         decoded_payload_size = frame_header_size;
-        pbi->frame_header_size = (size_t)frame_header_size;
+        pbi->frame_header_size = frame_header_size;
 
         if (cm->show_existing_frame) {
           frame_decoding_finished = 1;