From 0d7f08515a93d0600557166b17ecb3d42a5a4921 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Tue, 18 Jul 2023 20:22:57 +0200 Subject: [PATCH] More metadata checks --- .../categorizer/pcmaudio_categorizer.cpp | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/dwarfs/categorizer/pcmaudio_categorizer.cpp b/src/dwarfs/categorizer/pcmaudio_categorizer.cpp index 989a6f6e..30592c8e 100644 --- a/src/dwarfs/categorizer/pcmaudio_categorizer.cpp +++ b/src/dwarfs/categorizer/pcmaudio_categorizer.cpp @@ -104,6 +104,28 @@ struct pcmaudio_metadata { // uint32_t samples_per_second; auto operator<=>(pcmaudio_metadata const&) const = default; + + bool check() const { + if (!(bits_per_sample == 8 || bits_per_sample == 16 || + bits_per_sample == 20 || bits_per_sample == 24 || + bits_per_sample == 32)) { + return false; + } + + if (bits_per_sample == 8 && bytes_per_sample != 1) { + return false; + } + + if (bits_per_sample == 16 && bytes_per_sample != 2) { + return false; + } + + if (bits_per_sample == 32 && bytes_per_sample != 4) { + return false; + } + + return bytes_per_sample == 3 || bytes_per_sample == 4; + } }; std::ostream& operator<<(std::ostream& os, pcmaudio_metadata const& m) { @@ -292,6 +314,11 @@ bool pcmaudio_categorizer_::check_aiff( return false; } + if (!meta.check()) { + LOG_WARN << "[AIFF] " << path << ": metadata check failed: " << meta; + return false; + } + meta_valid = true; LOG_TRACE << "[AIFF] " << path << ": meta=" << meta; @@ -505,6 +532,11 @@ bool pcmaudio_categorizer_::check_caf( assert(meta.bytes_per_sample > 0); + if (!meta.check()) { + LOG_WARN << "[CAF] " << path << ": metadata check failed: " << meta; + return false; + } + meta_valid = true; LOG_TRACE << "[CAF] " << path << ": meta=" << meta;