mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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.
This commit is contained in:
parent
e25cac50e0
commit
303f931938
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user