Unified · Split
| @@ -4776,24 +4776,28 @@ static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom) · 4775 unmodified lines | |||
| 4776 | } else if (!memcmp(uuid, uuid_xmp, sizeof(uuid))) { | 4776 | } else if (!memcmp(uuid, uuid_xmp, sizeof(uuid))) { |
| 4777 | uint8_t *buffer; | 4777 | uint8_t *buffer; |
| 4778 | size_t len = atom.size - sizeof(uuid); | 4778 | size_t len = atom.size - sizeof(uuid); |
| 4779 | |||
| 4780 | buffer = av_mallocz(len + 1); | ||
| 4781 | if (!buffer) { | ||
| 4782 | return AVERROR(ENOMEM); | ||
| 4783 | } | ||
| 4784 | ret = avio_read(pb, buffer, len); | ||
| 4785 | if (ret < 0) { | ||
| 4786 | av_free(buffer); | ||
| 4787 | return ret; | ||
| 4788 | } else if (ret != len) { | ||
| 4789 | av_free(buffer); | ||
| 4790 | return AVERROR_INVALIDDATA; | ||
| 4791 | } | ||
| 4792 | if (c->export_xmp) { | 4779 | if (c->export_xmp) { |
| 4780 | buffer = av_mallocz(len + 1); | ||
| 4781 | if (!buffer) { | ||
| 4782 | return AVERROR(ENOMEM); | ||
| 4783 | } | ||
| 4784 | ret = avio_read(pb, buffer, len); | ||
| 4785 | if (ret < 0) { | ||
| 4786 | av_free(buffer); | ||
| 4787 | return ret; | ||
| 4788 | } else if (ret != len) { | ||
| 4789 | av_free(buffer); | ||
| 4790 | return AVERROR_INVALIDDATA; | ||
| 4791 | } | ||
| 4793 | buffer[len] = '\0'; | 4792 | buffer[len] = '\0'; |
| 4794 | av_dict_set(&c->fc->metadata, "xmp", buffer, 0); | 4793 | av_dict_set(&c->fc->metadata, "xmp", buffer, 0); |
| 4794 | av_free(buffer); | ||
| 4795 | } else { | ||
| 4796 | // skip all uuid atom, which makes it fast for long uuid-xmp file | ||
| 4797 | ret = avio_skip(pb, len); | ||
| 4798 | if (ret < 0) | ||
| 4799 | return ret; | ||
| 4795 | } | 4800 | } |
| 4796 | av_free(buffer); | ||
| 4797 | } else if (!memcmp(uuid, uuid_spherical, sizeof(uuid))) { | 4801 | } else if (!memcmp(uuid, uuid_spherical, sizeof(uuid))) { |
| 4798 | size_t len = atom.size - sizeof(uuid); | 4802 | size_t len = atom.size - sizeof(uuid); |
| 4799 | ret = mov_parse_uuid_spherical(sc, pb, len); | 4803 | ret = mov_parse_uuid_spherical(sc, pb, len); |