summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVittorio Giovara <vittorio.giovara@gmail.com>2015-11-09 15:14:42 +0100
committerVittorio Giovara <vittorio.giovara@gmail.com>2015-11-12 04:39:14 +0100
commit303f931938c618668f7f83c646a1850bef84641e (patch)
tree6232d2c2ca02355ea7cba263b060f4e55ec56ae7
parente25cac50e05d29a15d7a52c01c394ba913c97aee (diff)
mov: Correctly store dref paths
Rather than reading the alternate absolute path version from dref type 18, make sure that 0s are considered as '/'. These values are sometimes present in the full path, and are mistakenly interpreted as line terminators othewise. With the correct handling of this dref type, parsing type 18 is not needed any more.
-rw-r--r--libavformat/mov.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 9532213023..2982bf2811 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -538,7 +538,7 @@ static int mov_read_dref(MOVContext *c, AVIOContext *pb, MOVAtom atom)
av_log(c->fc, AV_LOG_DEBUG, "type %d, len %d\n", type, len);
if (len&1)
len += 1;
- if (type == 2 || type == 18) { // absolute path
+ if (type == 2) { // absolute path
av_free(dref->path);
dref->path = av_mallocz(len+1);
if (!dref->path)
@@ -549,15 +549,13 @@ static int mov_read_dref(MOVContext *c, AVIOContext *pb, MOVAtom atom)
av_freep(&dref->path);
return ret;
}
- if (type == 18) // no additional processing needed
- continue;
if (len > volume_len && !strncmp(dref->path, dref->volume, volume_len)) {
len -= volume_len;
memmove(dref->path, dref->path+volume_len, len);
dref->path[len] = 0;
}
for (j = 0; j < len; j++)
- if (dref->path[j] == ':')
+ if (dref->path[j] == ':' || dref->path[j] == 0)
dref->path[j] = '/';
av_log(c->fc, AV_LOG_DEBUG, "path %s\n", dref->path);
} else if (type == 0) { // directory name