* commit 'a0fa6d06b848f26b16ba12f0a9a4a85b93ab8022': matroska: Warn when metadata references a non-existent element
Unified · Split
| @@ -1405,24 +1405,55 @@ static void matroska_convert_tags(AVFormatContext *s) · 1404 unmodified lines | |||
| 1405 | for (i = 0; i < matroska->tags.nb_elem; i++) { | 1405 | for (i = 0; i < matroska->tags.nb_elem; i++) { |
| 1406 | if (tags[i].target.attachuid) { | 1406 | if (tags[i].target.attachuid) { |
| 1407 | MatroskaAttachment *attachment = matroska->attachments.elem; | 1407 | MatroskaAttachment *attachment = matroska->attachments.elem; |
| 1408 | for (j = 0; j < matroska->attachments.nb_elem; j++) | 1408 | int found = 0; |
| 1409 | for (j = 0; j < matroska->attachments.nb_elem; j++) { | ||
| 1409 | if (attachment[j].uid == tags[i].target.attachuid && | 1410 | if (attachment[j].uid == tags[i].target.attachuid && |
| 1410 | attachment[j].stream) | 1411 | attachment[j].stream) { |
| 1411 | matroska_convert_tag(s, &tags[i].tag, | 1412 | matroska_convert_tag(s, &tags[i].tag, |
| 1412 | &attachment[j].stream->metadata, NULL); | 1413 | &attachment[j].stream->metadata, NULL); |
| 1414 | found = 1; | ||
| 1415 | } | ||
| 1416 | } | ||
| 1417 | if (!found) { | ||
| 1418 | av_log(NULL, AV_LOG_WARNING, | ||
| 1419 | "The tags at index %d refer to a " | ||
| 1420 | "non-existent attachment %"PRId64".\n", | ||
| 1421 | i, tags[i].target.attachuid); | ||
| 1422 | } | ||
| 1413 | } else if (tags[i].target.chapteruid) { | 1423 | } else if (tags[i].target.chapteruid) { |
| 1414 | MatroskaChapter *chapter = matroska->chapters.elem; | 1424 | MatroskaChapter *chapter = matroska->chapters.elem; |
| 1415 | for (j = 0; j < matroska->chapters.nb_elem; j++) | 1425 | int found = 0; |
| 1426 | for (j = 0; j < matroska->chapters.nb_elem; j++) { | ||
| 1416 | if (chapter[j].uid == tags[i].target.chapteruid && | 1427 | if (chapter[j].uid == tags[i].target.chapteruid && |
| 1417 | chapter[j].chapter) | 1428 | chapter[j].chapter) { |
| 1418 | matroska_convert_tag(s, &tags[i].tag, | 1429 | matroska_convert_tag(s, &tags[i].tag, |
| 1419 | &chapter[j].chapter->metadata, NULL); | 1430 | &chapter[j].chapter->metadata, NULL); |
| 1431 | found = 1; | ||
| 1432 | } | ||
| 1433 | } | ||
| 1434 | if (!found) { | ||
| 1435 | av_log(NULL, AV_LOG_WARNING, | ||
| 1436 | "The tags at index %d refer to a non-existent chapter " | ||
| 1437 | "%"PRId64".\n", | ||
| 1438 | i, tags[i].target.chapteruid); | ||
| 1439 | } | ||
| 1420 | } else if (tags[i].target.trackuid) { | 1440 | } else if (tags[i].target.trackuid) { |
| 1421 | MatroskaTrack *track = matroska->tracks.elem; | 1441 | MatroskaTrack *track = matroska->tracks.elem; |
| 1422 | for (j = 0; j < matroska->tracks.nb_elem; j++) | 1442 | int found = 0; |
| 1423 | if (track[j].uid == tags[i].target.trackuid && track[j].stream) | 1443 | for (j = 0; j < matroska->tracks.nb_elem; j++) { |
| 1444 | if (track[j].uid == tags[i].target.trackuid && | ||
| 1445 | track[j].stream) { | ||
| 1424 | matroska_convert_tag(s, &tags[i].tag, | 1446 | matroska_convert_tag(s, &tags[i].tag, |
| 1425 | &track[j].stream->metadata, NULL); | 1447 | &track[j].stream->metadata, NULL); |
| 1448 | found = 1; | ||
| 1449 | } | ||
| 1450 | } | ||
| 1451 | if (!found) { | ||
| 1452 | av_log(NULL, AV_LOG_WARNING, | ||
| 1453 | "The tags at index %d refer to a non-existent track " | ||
| 1454 | "%"PRId64".\n", | ||
| 1455 | i, tags[i].target.trackuid); | ||
| 1456 | } | ||
| 1426 | } else { | 1457 | } else { |
| 1427 | matroska_convert_tag(s, &tags[i].tag, &s->metadata, | 1458 | matroska_convert_tag(s, &tags[i].tag, &s->metadata, |
| 1428 | tags[i].target.type); | 1459 | tags[i].target.type); |