Commit 0f8512c4 authored by Vittorio Giovara's avatar Vittorio Giovara

mov: Validate spherical metadata version

parent 23657723
...@@ -3235,7 +3235,7 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom) ...@@ -3235,7 +3235,7 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
{ {
AVStream *st; AVStream *st;
MOVStreamContext *sc; MOVStreamContext *sc;
int size; int size, version;
int32_t yaw, pitch, roll; int32_t yaw, pitch, roll;
uint32_t tag; uint32_t tag;
enum AVSphericalProjection projection; enum AVSphericalProjection projection;
...@@ -3260,7 +3260,13 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom) ...@@ -3260,7 +3260,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);
...@@ -3282,7 +3288,13 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom) ...@@ -3282,7 +3288,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);
...@@ -3294,7 +3306,13 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom) ...@@ -3294,7 +3306,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'):
projection = AV_SPHERICAL_CUBEMAP; projection = AV_SPHERICAL_CUBEMAP;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment