diff options
author | Andree Buschmann <AndreeBuschmann@t-online.de> | 2010-01-31 11:43:42 +0000 |
---|---|---|
committer | Andree Buschmann <AndreeBuschmann@t-online.de> | 2010-01-31 11:43:42 +0000 |
commit | db4d7a313e10d085218a95f9176b12287a300d7c (patch) | |
tree | 755ba6a2ae831cee6652ff8e922de1b8bf492a3c /apps | |
parent | 4c96bb54c60e10b190f2421a3bcb69a96381fce9 (diff) | |
download | rockbox-db4d7a313e10d085218a95f9176b12287a300d7c.tar.gz rockbox-db4d7a313e10d085218a95f9176b12287a300d7c.zip |
1st part of fix for FS#10637. Correction of mpc header parsing.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24408 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/codecs/libmusepack/streaminfo.c | 12 | ||||
-rw-r--r-- | apps/metadata/mpc.c | 8 |
2 files changed, 12 insertions, 8 deletions
diff --git a/apps/codecs/libmusepack/streaminfo.c b/apps/codecs/libmusepack/streaminfo.c index d9c925dbfb..3edf50a5ea 100644 --- a/apps/codecs/libmusepack/streaminfo.c +++ b/apps/codecs/libmusepack/streaminfo.c | |||
@@ -223,15 +223,17 @@ mpc_streaminfo_read(mpc_streaminfo * si, mpc_reader * r) | |||
223 | #endif | 223 | #endif |
224 | si->stream_version = HeaderData[0] >> 24; | 224 | si->stream_version = HeaderData[0] >> 24; |
225 | 225 | ||
226 | // stream version 8 | ||
227 | if ((si->stream_version & 15) >= 8) { | ||
228 | return ERROR_CODE_INVALIDSV; | ||
229 | } | ||
230 | // stream version 7 | 226 | // stream version 7 |
231 | else if ((si->stream_version & 15) == 7) { | 227 | if ((si->stream_version & 15) == 7) { |
232 | Error = streaminfo_read_header_sv7(si, HeaderData); | 228 | Error = streaminfo_read_header_sv7(si, HeaderData); |
233 | if (Error != ERROR_CODE_OK) return Error; | 229 | if (Error != ERROR_CODE_OK) return Error; |
230 | } else { | ||
231 | // only sv7 allowed with "MP+" signature | ||
232 | return ERROR_CODE_INVALIDSV; | ||
234 | } | 233 | } |
234 | } else if (memcmp(HeaderData, "MPCK", 4) == 0) { | ||
235 | // stream version 8 uses "MPCK" signature | ||
236 | return ERROR_CODE_INVALIDSV; | ||
235 | } else { | 237 | } else { |
236 | #ifdef MPC_SUPPORT_SV456 | 238 | #ifdef MPC_SUPPORT_SV456 |
237 | #ifndef MPC_LITTLE_ENDIAN | 239 | #ifndef MPC_LITTLE_ENDIAN |
diff --git a/apps/metadata/mpc.c b/apps/metadata/mpc.c index e20ac3e8a2..3f8907a934 100644 --- a/apps/metadata/mpc.c +++ b/apps/metadata/mpc.c | |||
@@ -66,9 +66,7 @@ bool get_musepack_metadata(int fd, struct mp3entry *id3) | |||
66 | 66 | ||
67 | header[0] = letoh32(header[0]); | 67 | header[0] = letoh32(header[0]); |
68 | streamversion = (header[0] >> 24) & 15; | 68 | streamversion = (header[0] >> 24) & 15; |
69 | if (streamversion >= 8) { | 69 | if (streamversion == 7) { |
70 | return false; /* SV8 or higher don't exist yet, so no support */ | ||
71 | } else if (streamversion == 7) { | ||
72 | unsigned int gapless = (header[5] >> 31) & 0x0001; | 70 | unsigned int gapless = (header[5] >> 31) & 0x0001; |
73 | unsigned int last_frame_samples = (header[5] >> 20) & 0x07ff; | 71 | unsigned int last_frame_samples = (header[5] >> 20) & 0x07ff; |
74 | unsigned int bufused = 0; | 72 | unsigned int bufused = 0; |
@@ -82,7 +80,11 @@ bool get_musepack_metadata(int fd, struct mp3entry *id3) | |||
82 | 80 | ||
83 | bufused = set_replaygain(id3, false, header[3], bufused); | 81 | bufused = set_replaygain(id3, false, header[3], bufused); |
84 | bufused = set_replaygain(id3, true, header[4], bufused); | 82 | bufused = set_replaygain(id3, true, header[4], bufused); |
83 | } else { | ||
84 | return false; /* only SV7 is allowed within a "MP+" signature */ | ||
85 | } | 85 | } |
86 | } else if (!memcmp(header, "MPCK", 4)) { /* Compare to sig "MPCK" */ | ||
87 | return false; /* SV8 is not supported yet */ | ||
86 | } else { | 88 | } else { |
87 | return false; /* SV4-6 is not supported anymore */ | 89 | return false; /* SV4-6 is not supported anymore */ |
88 | } | 90 | } |