aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2017-10-17 15:27:43 -0300
committerJames Almer <jamrial@gmail.com>2017-10-17 15:27:43 -0300
commit552d2cb6f75170621ac37abac249dfdac893bcb6 (patch)
tree9bb6ed5ff6bb086cdf683c0e3d5a9a742f5a165e /libavformat
parent9780d5839e12e4d26c829f84978a39aff717a18b (diff)
parent0f8512c4a87b89b4694053d8ffda48066ee1da62 (diff)
downloadffmpeg-552d2cb6f75170621ac37abac249dfdac893bcb6.tar.gz
Merge commit '0f8512c4a87b89b4694053d8ffda48066ee1da62'
* commit '0f8512c4a87b89b4694053d8ffda48066ee1da62': mov: Validate spherical metadata version Merged-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/mov.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 07d57037db..b22a116140 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -4823,7 +4823,7 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
{
AVStream *st;
MOVStreamContext *sc;
- int size, layout;
+ int size, version, layout;
int32_t yaw, pitch, roll;
uint32_t l = 0, t = 0, r = 0, b = 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");
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 */
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");
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 */
yaw = avio_rb32(pb);
@@ -4883,7 +4895,13 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
return AVERROR_INVALIDDATA;
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) {
case MKTAG('c','b','m','p'):
layout = avio_rb32(pb);