aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/id3v23_extractor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/id3v23_extractor.c')
-rw-r--r--src/plugins/id3v23_extractor.c16
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;