diff options
Diffstat (limited to 'src/plugins/id3v23_extractor.c')
-rw-r--r-- | src/plugins/id3v23_extractor.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/plugins/id3v23_extractor.c b/src/plugins/id3v23_extractor.c index 4b1b2d2..c31d63d 100644 --- a/src/plugins/id3v23_extractor.c +++ b/src/plugins/id3v23_extractor.c | |||
@@ -136,6 +136,7 @@ EXTRACTOR_id3v23_extract (const unsigned char *data, | |||
136 | char *mime; | 136 | char *mime; |
137 | enum EXTRACTOR_MetaType type; | 137 | enum EXTRACTOR_MetaType type; |
138 | size_t off; | 138 | size_t off; |
139 | int obo; | ||
139 | 140 | ||
140 | if ((size < 16) || | 141 | if ((size < 16) || |
141 | (data[0] != 0x49) || | 142 | (data[0] != 0x49) || |
@@ -285,21 +286,24 @@ EXTRACTOR_id3v23_extract (const unsigned char *data, | |||
285 | if (csize < 5) | 286 | if (csize < 5) |
286 | return 0; /* malformed */ | 287 | return 0; /* malformed */ |
287 | /* find end of description */ | 288 | /* find end of description */ |
289 | obo = data[pos + 14] == '\0' ? 1 : 0; /* someone put a \0 in front of comments... */ | ||
290 | if (csize < 6) | ||
291 | obo = 0; | ||
288 | switch (data[pos + 10]) | 292 | switch (data[pos + 10]) |
289 | { | 293 | { |
290 | case 0x00: | 294 | case 0x00: |
291 | word = EXTRACTOR_common_convert_to_utf8 ((const char *) &data[pos + 15], | 295 | word = EXTRACTOR_common_convert_to_utf8 ((const char *) &data[pos + 14 + obo], |
292 | csize - 5, "ISO-8859-1"); | 296 | csize - 4 - obo, "ISO-8859-1"); |
293 | break; | 297 | break; |
294 | case 0x01: | 298 | case 0x01: |
295 | word = EXTRACTOR_common_convert_to_utf8 ((const char *) &data[pos + 15], | 299 | word = EXTRACTOR_common_convert_to_utf8 ((const char *) &data[pos + 14 + obo], |
296 | csize - 5, "UCS-2"); | 300 | csize - 4 - obo, "UCS-2"); |
297 | break; | 301 | break; |
298 | default: | 302 | default: |
299 | /* bad encoding byte, | 303 | /* bad encoding byte, |
300 | try to convert from iso-8859-1 */ | 304 | try to convert from iso-8859-1 */ |
301 | word = EXTRACTOR_common_convert_to_utf8 ((const char *) &data[pos + 15], | 305 | word = EXTRACTOR_common_convert_to_utf8 ((const char *) &data[pos + 14 + obo], |
302 | csize - 5, "ISO-8859-1"); | 306 | csize - 4 - obo, "ISO-8859-1"); |
303 | break; | 307 | break; |
304 | } | 308 | } |
305 | break; | 309 | break; |