[FFmpeg-cvslog] mov: Trim dref absolute path

Vittorio Giovara git at videolan.org
Wed Apr 13 17:22:32 CEST 2016


ffmpeg | branch: master | Vittorio Giovara <vittorio.giovara at gmail.com> | Mon Feb 15 21:44:07 2016 -0500| [d40cb726d271b0284642a1ba159eb26a5c579f77] | committer: Vittorio Giovara

mov: Trim dref absolute path

Samples produced by Omneon (Harmonic) store external references with
paths ending with 0s. Such movs cannot be loaded properly since every
0 is converted to '/', to keep the same parsing code for dref type 2
and type 18: this makes the external reference point to a non-existing
direactory, rather than to the actual referenced file.

Add a brief trimming loop that drops all ending 0s before trying to
parse the external reference path.

Signed-off-by: Vittorio Giovara <vittorio.giovara at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d40cb726d271b0284642a1ba159eb26a5c579f77
---

 libavformat/mov.c |    7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 0dee5ec..a556aa7 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -554,6 +554,13 @@ static int mov_read_dref(MOVContext *c, AVIOContext *pb, MOVAtom atom)
                         memmove(dref->path, dref->path+volume_len, len);
                         dref->path[len] = 0;
                     }
+                    // trim string of any ending zeros
+                    for (j = len - 1; j >= 0; j--) {
+                        if (dref->path[j] == 0)
+                            len--;
+                        else
+                            break;
+                    }
                     for (j = 0; j < len; j++)
                         if (dref->path[j] == ':' || dref->path[j] == 0)
                             dref->path[j] = '/';



More information about the ffmpeg-cvslog mailing list