summaryrefslogtreecommitdiff
path: root/junklib.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-11-28 20:37:44 +0100
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-11-28 20:37:44 +0100
commit2770e496969a14b2dd82b2817f706b34f14b6e80 (patch)
treeb1773302eb883123820879b6ba94babd8013d5e6 /junklib.c
parent2b83812723ac235ff1ad53687c37c6e254eb541e (diff)
changed apev2 parser to allow bigger items (to support embedded cuesheets)
Diffstat (limited to 'junklib.c')
-rw-r--r--junklib.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/junklib.c b/junklib.c
index 684e0244..f492b5c0 100644
--- a/junklib.c
+++ b/junklib.c
@@ -534,7 +534,7 @@ junk_read_ape (playItem_t *it, DB_FILE *fp) {
uint32_t numitems = extract_i32_le (&header[16]);
uint32_t flags = extract_i32_le (&header[20]);
- //trace ("APEv%d, size=%d, items=%d, flags=%x\n", version, size, numitems, flags);
+ trace ("APEv%d, size=%d, items=%d, flags=%x\n", version, size, numitems, flags);
// now seek to beginning of the tag (exluding header)
if (deadbeef->fseek (fp, -size, SEEK_CUR) == -1) {
trace ("failed to seek to tag start (-%d)\n", size);
@@ -564,11 +564,13 @@ junk_read_ape (playItem_t *it, DB_FILE *fp) {
keysize++;
}
key[255] = 0;
+ trace ("item %d, size %d, flags %08x, keysize %d, key %s\n", i, itemsize, itemflags, keysize, key);
// read value
- if (itemsize <= 1024)
+ if (itemsize <= 100000) // just a sanity check
{
- char value[itemsize+1];
+ char *value = malloc (itemsize+1);
if (deadbeef->fread (value, 1, itemsize, fp) != itemsize) {
+ free (value);
return -1;
}
value[itemsize] = 0;
@@ -619,10 +621,11 @@ junk_read_ape (playItem_t *it, DB_FILE *fp) {
trace ("track_peak=%s\n", value);
}
}
+ free (value);
}
else {
// try to skip
- if (deadbeef->fseek (fp, SEEK_CUR, itemsize)) {
+ if (0 != deadbeef->fseek (fp, SEEK_CUR, itemsize)) {
fprintf (stderr, "junklib: corrupted APEv2 tag\n");
return -1;
}