diff options
Diffstat (limited to 'audio/amarok/files/patch-tkadv2009-002')
-rw-r--r-- | audio/amarok/files/patch-tkadv2009-002 | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/audio/amarok/files/patch-tkadv2009-002 b/audio/amarok/files/patch-tkadv2009-002 deleted file mode 100644 index 7e4cb0cdeceb..000000000000 --- a/audio/amarok/files/patch-tkadv2009-002 +++ /dev/null @@ -1,85 +0,0 @@ ---- amarok/src/metadata/audible/audibletag.cpp 2009/01/09 17:36:52 908414 -+++ amarok/src/metadata/audible/audibletag.cpp 2009/01/09 17:38:50 908415 -@@ -71,7 +71,8 @@ - { - char buf[1023]; - fseek(fp, OFF_PRODUCT_ID, SEEK_SET); -- fread(buf, strlen("product_id"), 1, fp); -+ if (fread(buf, strlen("product_id"), 1, fp) != 1) -+ return; - if(memcmp(buf, "product_id", strlen("product_id"))) - { - buf[20]='\0'; -@@ -130,24 +131,65 @@ - - bool Audible::Tag::readTag( FILE *fp, char **name, char **value) - { -+ // arbitrary value that has to be smaller than 2^32-1 and that should be large enough for all tags -+ const uint32_t maxtaglen = 100000; -+ - uint32_t nlen; -- fread(&nlen, sizeof(nlen), 1, fp); -+ if (fread(&nlen, sizeof(nlen), 1, fp) != 1) -+ return false; - nlen = ntohl(nlen); - //fprintf(stderr, "tagname len=%x\n", (unsigned)nlen); -- *name = new char[nlen+1]; -- (*name)[nlen] = '\0'; -+ if (nlen > maxtaglen) -+ return false; - - uint32_t vlen; -- fread(&vlen, sizeof(vlen), 1, fp); -+ if (fread(&vlen, sizeof(vlen), 1, fp) != 1) -+ return false; - vlen = ntohl(vlen); - //fprintf(stderr, "tag len=%x\n", (unsigned)vlen); -+ if (vlen > maxtaglen) -+ return false; -+ -+ *name = new char[nlen+1]; -+ if (!*name) -+ return false; -+ - *value = new char[vlen+1]; -+ if (!*value) -+ { -+ delete[] *name; -+ *name = 0; -+ return false; -+ } -+ -+ (*name)[nlen] = '\0'; - (*value)[vlen] = '\0'; - -- fread(*name, nlen, 1, fp); -- fread(*value, vlen, 1, fp); -+ if (fread(*name, nlen, 1, fp) != 1) -+ { -+ delete[] *name; -+ *name = 0; -+ delete[] *value; -+ *value = 0; -+ return false; -+ } -+ if (fread(*value, vlen, 1, fp) != 1) -+ { -+ delete[] *name; -+ *name = 0; -+ delete[] *value; -+ *value = 0; -+ return false; -+ } - char lasttag; -- fread(&lasttag, 1, 1, fp); -+ if (fread(&lasttag, 1, 1, fp) != 1) -+ { -+ delete[] *name; -+ *name = 0; -+ delete[] *value; -+ *value = 0; -+ return false; -+ } - //fprintf(stderr, "%s: \"%s\"\n", *name, *value); - - m_tagsEndOffset += 2 * 4 + nlen + vlen + 1; |