decoder/dsdiff: apply padding to odd-sized chunks

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1001
This commit is contained in:
Max Kellermann 2020-11-10 15:39:18 +01:00
parent 8a7986c3bf
commit 1092882f38
2 changed files with 14 additions and 1 deletions

2
NEWS
View File

@ -1,4 +1,6 @@
ver 0.22.4 (not yet released)
* decoder
- dsdiff: apply padding to odd-sized chunks
ver 0.22.3 (2020/11/06)
* playlist

View File

@ -55,6 +55,17 @@ struct DsdiffChunkHeader {
uint64_t GetSize() const {
return size.Read();
}
/**
* Applies padding to GetSize(), according to the DSDIFF
* specification
* (http://www.sonicstudio.com/pdf/dsd/DSDIFF_1.5_Spec.pdf)
* section 2.3.
*/
[[nodiscard]] constexpr
uint64_t GetPaddedSize() const noexcept {
return (GetSize() + 1) & ~uint64_t(1);
}
};
/** struct for DSDIFF native Artist and Title tags */
@ -117,7 +128,7 @@ dsdiff_read_prop_snd(DecoderClient *client, InputStream &is,
return false;
offset_type chunk_end_offset = is.GetOffset()
+ header.GetSize();
+ header.GetPaddedSize();
if (chunk_end_offset > end_offset)
return false;