From 24fdf0b7b0c0d705a80fbc1d92c3e3260e86c53b Mon Sep 17 00:00:00 2001 From: Romain Beauxis Date: Tue, 13 Jun 2023 09:49:48 -0600 Subject: [PATCH] Fix mp4 data atom parsing. --- .gitignore | 1 + src/metadataMP4.ml | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index b59df2a..e197e88 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ _build *~ +.*.sw* diff --git a/src/metadataMP4.ml b/src/metadataMP4.ml index da805c2..4e4f6a8 100644 --- a/src/metadataMP4.ml +++ b/src/metadataMP4.ml @@ -37,10 +37,19 @@ let parse f : metadata = remaining := !remaining - chunk (tag :: l) done | ["data"; tag; "ilst"; "meta"; "udta"; "moov"] -> ( - let value = R.read f (len - 8) in - match List.assoc_opt tag tagn with - | Some tag -> ans := (tag, value) :: !ans - | None -> ()) + if len < 16 then raise Invalid; + let data_type = R.int32_be f in + let _ = R.read f 4 in + let value = R.read f (len - 16) in + match (data_type, List.assoc_opt tag tagn) with + | 1, Some tag -> ans := (tag, value) :: !ans + | 2, Some tag -> + ans := + ( tag, + MetadataCharEncoding.Naive.convert ~source:`UTF_16BE value + ) + :: !ans + | _ -> ()) | _ -> R.drop f (len - 8)); len in