int i, cnum, h, m, s, ms, keylen = strlen(key);
AVChapter *chapter = NULL;
- if (keylen < 9 || sscanf(key, "CHAPTER%03d", &cnum) != 1)
+ if (keylen < 9 || av_strncasecmp(key, "CHAPTER", 7) || sscanf(key+7, "%03d", &cnum) != 1)
return 0;
if (keylen <= 10) {
ms + 1000 * (s + 60 * (m + 60 * h)),
AV_NOPTS_VALUE, NULL);
av_free(val);
- } else if (!strcmp(key + keylen - 4, "NAME")) {
+ } else if (!av_strcasecmp(key + keylen - 4, "NAME")) {
for (i = 0; i < as->nb_chapters; i++)
if (as->chapters[i]->id == cnum) {
chapter = as->chapters[i];
const uint8_t *p = buf;
const uint8_t *end = buf + size;
int updates = 0;
- unsigned n, j;
+ unsigned n;
int s;
/* must have vendor_length and user_comment_list_length */
return AVERROR(ENOMEM);
}
- for (j = 0; j < tl; j++)
- tt[j] = av_toupper(t[j]);
+ memcpy(tt, t, tl);
tt[tl] = 0;
memcpy(ct, v, vl);
* 'METADATA_BLOCK_PICTURE'. This is the preferred and
* recommended way of embedding cover art within VorbisComments."
*/
- if (!strcmp(tt, "METADATA_BLOCK_PICTURE") && parse_picture) {
+ if (!av_strcasecmp(tt, "METADATA_BLOCK_PICTURE") && parse_picture) {
int ret, len = AV_BASE64_DECODE_SIZE(vl);
char *pict = av_malloc(len);
av_freep(&tt);
av_freep(&ct);
if (ret > 0)
- ret = ff_flac_parse_picture(as, pict, ret);
+ ret = ff_flac_parse_picture(as, pict, ret, 0);
av_freep(&pict);
if (ret < 0) {
av_log(as, AV_LOG_WARNING, "Failed to parse cover art block.\n");
av_dict_set(m, tt, ";", AV_DICT_APPEND);
}
av_dict_set(m, tt, ct,
- AV_DICT_DONT_STRDUP_KEY |
+ AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL |
AV_DICT_APPEND);
- av_freep(&ct);
}
}
}
os->new_metadata = av_packet_pack_dictionary(st->metadata, &os->new_metadata_size);
/* Send an empty dictionary to indicate that metadata has been cleared. */
} else {
- os->new_metadata = av_malloc(1);
+ os->new_metadata = av_mallocz(1);
os->new_metadata_size = 0;
}
}
}
} else {
- int ret = fixup_vorbis_headers(s, priv, &st->codecpar->extradata);
+ int ret;
+
+ if (priv->vp)
+ return AVERROR_INVALIDDATA;
+
+ ret = fixup_vorbis_headers(s, priv, &st->codecpar->extradata);
if (ret < 0) {
st->codecpar->extradata_size = 0;
return ret;