realmedia: parse the original RealAudio files with even shorter v3 header
authorKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 24 Feb 2023 17:25:02 +0000 (18:25 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 24 Feb 2023 17:25:02 +0000 (18:25 +0100)
nihav-realmedia/src/demuxers/realmedia.rs

index 45c117a9b60e36db14c502718946e6d5b39f01b8..14183c9cc4ac54fca43069cf4b3a10d7c9b5cbed 100644 (file)
@@ -846,10 +846,15 @@ fn parse_aformat3(src: &mut ByteReader) -> DemuxerResult<RealAudioInfo> {
 
     skip_ra_metadata(src)?;
 
-    let _can_copy           = src.read_byte()?;
-    let fcc_len             = src.read_byte()?;
-    validate!(fcc_len == 4);
-    let fcc                 = src.read_u32be()?;
+    // the original RealAudio has no such fields
+    let fcc = if src.tell() != start + u64::from(header_len) + 2 {
+        let _can_copy           = src.read_byte()?;
+        let fcc_len             = src.read_byte()?;
+        validate!(fcc_len == 0 || fcc_len == 4);
+                                  src.read_u32be()?
+    } else {
+        read_u32be(b"lpcJ")?
+    };
 
     let end = src.tell();
     validate!(end - start <= (header_len as u64) + 2);