On 16/02/16 03:44, Vittorio Giovara wrote: > 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 <[email protected]> > --- > Note: all samples I was given only have one zero appended, so it might > be enough to just do something like > > -if (dref->path[j] == ':' || dref->path[j] == 0) > +if (dref->path[j] == ':' || (dref->path[j] == 0 && j < len -1)) > > the loop seems safer but potentially wasteful. > Opinions? > Vittorio > > libavformat/mov.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/libavformat/mov.c b/libavformat/mov.c > index 1cb91b9..7081ead 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] = '/'; >
breaking the other loop in the presence of 0 isn't an option? _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
