[vlc-devel] [PATCH 1/4] mkv/demux: fix 17567: null-pointer dereference in EnsureDuration

Steve Lhomme robux4 at gmail.com
Thu Nov 3 09:43:09 CET 2016


On Wed, Nov 2, 2016 at 11:55 AM, Filip Roséen <filip at atch.se> wrote:
> Hi Steve,
>
> On 2016-11-02 11:39, Steve Lhomme wrote:
>
>  As I said, the already merge change is wrong. Non-finite streams
>  should be treated as finite streams when it comes to the duration, so
>  long as we know the file end (I suppose STREAM_CAN_FASTSEEK implies
>  that).
>
> I do not agree to this, which you know.
>
>  But why is it OK with a file with missing/bogus Cues then ? This is
>  the exact same code that will try to find the duration.
>
>  Now I'm beginning to see a difference though. If one (and probably
>  all) Cluster has no known size we need to parse all elements/Blocks of
>  that Cluster. Whereas for a finite size Cluster we just skip over that
>  Cluster until we find no Cluster. That's a lot less skipping and
>  header reading.
>
>  So I agree that for non-finite Clusters we should not try too hard.
>  But that decision should be made in EnsureDuration(). Because if the
>  Cues is present we don't have to do that huge data parsing.
>
> Precisely my point from the beginning (though not where to have the decision
> take place - that is something I (now) agree with), there is a huge
> difference between knowing the cluster size (meaning that we can jump to the
> next one directly), and walking through the entire thing (scanning for the
> end).
>
>  It makes sense than a live Matroska recorder would keep track of where
>  it wrote each Cluster and write a Cues at the end, making the file a
>  lot easier to seek.
>
>  How about the attached patch ?
>
> If one really want to make sure that things behave as I have been trying to
> explain, one should add a check for non-finite cluster in the
> while-predicate, inside the if-block modified by your patch, and abort
> computation if such is discovered.
>
> The branch to locate the last cluster should be taken even if we have cues
> that have populated _seeker._cluster_positions (because there is nothing
> saying that the last entry in the _seeker corresponds to the last cluster in
> the file (broken or missing cues)).

Done & Done https://patches.videolan.org/patch/14898/

> Other than the above, LGTM.
>
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>


More information about the vlc-devel mailing list