Browse Source

Merge commit '0f8512c4a87b89b4694053d8ffda48066ee1da62'

* commit '0f8512c4a87b89b4694053d8ffda48066ee1da62':
  mov: Validate spherical metadata version

Merged-by: James Almer <jamrial@gmail.com>
tags/n4.0
James Almer 8 years ago
parent
commit
552d2cb6f7
1 changed files with 22 additions and 4 deletions
  1. +22
    -4
      libavformat/mov.c

+ 22
- 4
libavformat/mov.c View File

@@ -4823,7 +4823,7 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
{ {
AVStream *st; AVStream *st;
MOVStreamContext *sc; MOVStreamContext *sc;
int size, layout;
int size, version, layout;
int32_t yaw, pitch, roll; int32_t yaw, pitch, roll;
uint32_t l = 0, t = 0, r = 0, b = 0; uint32_t l = 0, t = 0, r = 0, b = 0;
uint32_t tag, padding = 0; uint32_t tag, padding = 0;
@@ -4849,7 +4849,13 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
av_log(c->fc, AV_LOG_ERROR, "Missing spherical video header\n"); av_log(c->fc, AV_LOG_ERROR, "Missing spherical video header\n");
return 0; return 0;
} }
avio_skip(pb, 4); /* version + flags */
version = avio_r8(pb);
if (version != 0) {
av_log(c->fc, AV_LOG_WARNING, "Unknown spherical version %d\n",
version);
return 0;
}
avio_skip(pb, 3); /* flags */
avio_skip(pb, size - 12); /* metadata_source */ avio_skip(pb, size - 12); /* metadata_source */


size = avio_rb32(pb); size = avio_rb32(pb);
@@ -4871,7 +4877,13 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
av_log(c->fc, AV_LOG_ERROR, "Missing projection header box\n"); av_log(c->fc, AV_LOG_ERROR, "Missing projection header box\n");
return 0; return 0;
} }
avio_skip(pb, 4); /* version + flags */
version = avio_r8(pb);
if (version != 0) {
av_log(c->fc, AV_LOG_WARNING, "Unknown spherical version %d\n",
version);
return 0;
}
avio_skip(pb, 3); /* flags */


/* 16.16 fixed point */ /* 16.16 fixed point */
yaw = avio_rb32(pb); yaw = avio_rb32(pb);
@@ -4883,7 +4895,13 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;


tag = avio_rl32(pb); tag = avio_rl32(pb);
avio_skip(pb, 4); /* version + flags */
version = avio_r8(pb);
if (version != 0) {
av_log(c->fc, AV_LOG_WARNING, "Unknown spherical version %d\n",
version);
return 0;
}
avio_skip(pb, 3); /* flags */
switch (tag) { switch (tag) {
case MKTAG('c','b','m','p'): case MKTAG('c','b','m','p'):
layout = avio_rb32(pb); layout = avio_rb32(pb);


Loading…
Cancel
Save