[vlc-devel] [vlc-commits] MKV: Don't allow Matroska Void/ CRC32 elements fallback when looking for a level 1 element
Steve Lhomme
robux4 at gmail.com
Fri Feb 20 16:24:53 CET 2015
Fixes #9623
On Fri, Feb 20, 2015 at 3:34 PM, Steve Lhomme <git at videolan.org> wrote:
> vlc | branch: master | Steve Lhomme <robux4 at gmail.com> | Wed Feb 18
> 16:12:33 2015 +0000| [11a5d4f4c05cf4eb089967f09561c158083495fb] |
> committer: Jean-Baptiste Kempf
>
> MKV: Don't allow Matroska Void/CRC32 elements fallback when looking for a
> level 1 element
>
> Slightly better version with the right macros to access the semantic
> context master.
>
> Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
>
> >
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=11a5d4f4c05cf4eb089967f09561c158083495fb
> ---
>
> modules/demux/mkv/Ebml_parser.cpp | 29 ++++++++++++++++++++++++++++-
> modules/demux/mkv/Ebml_parser.hpp | 1 +
> 2 files changed, 29 insertions(+), 1 deletion(-)
>
> diff --git a/modules/demux/mkv/Ebml_parser.cpp
> b/modules/demux/mkv/Ebml_parser.cpp
> index 21e219e..a42b936 100644
> --- a/modules/demux/mkv/Ebml_parser.cpp
> +++ b/modules/demux/mkv/Ebml_parser.cpp
> @@ -146,6 +146,28 @@ void EbmlParser::Reset( demux_t *p_demux )
> mb_dummy = var_InheritBool( p_demux, "mkv-use-dummy" );
> }
>
> +
> +// Define a special Segment context that doesn't allow void/crc32 elements
> +static const EbmlSemanticContext & GetEbmlNoGlobal_Context();
> +static const EbmlSemanticContext Context_EbmlNoGlobal =
> EbmlSemanticContext(0, NULL, NULL, *GetEbmlNoGlobal_Context, NULL);
> +static const EbmlSemantic EbmlNoGlobal_ContextList[0] =
> +{
> + //EbmlSemantic(false, false, EBML_INFO(EbmlCrc32)), ///< EbmlCrc32
> + //EbmlSemantic(false, false, EBML_INFO(EbmlVoid)), ///< EbmlVoid
> +};
> +static const EbmlSemanticContext EbmlNoGlobal_Context =
> EbmlSemanticContext(countof(EbmlNoGlobal_ContextList),
> EbmlNoGlobal_ContextList, NULL, *GetEbmlNoGlobal_Context, NULL);
> +static const EbmlSemanticContext & GetEbmlNoGlobal_Context()
> +{
> + return EbmlNoGlobal_Context;
> +}
> +
> +// the Segment Context should not allow Void or CRC32 elements to avoid
> lookup false alarm
> +const EbmlSemanticContext Context_KaxSegmentVLC =
> EbmlSemanticContext(KaxSegment_Context.GetSize(),
> +
> KaxSegment_Context.MyTable,
> +
> KaxSegment_Context.Parent(),
> +
> GetEbmlNoGlobal_Context,
> +
> KaxSegment_Context.GetMaster());
> +
> EbmlElement *EbmlParser::Get( int n_call )
> {
> int i_ulev = 0;
> @@ -170,8 +192,13 @@ EbmlElement *EbmlParser::Get( int n_call )
>
> }
>
> + // ignore global Void/CRC32 elements when looking for level 1
> elements in the Segment
> + EbmlSemanticContext e_context =
> + EBML_CTX_MASTER( EBML_CONTEXT(m_el[mi_level - 1]) ) ==
> EBML_CTX_MASTER( Context_KaxSegmentVLC )
> + ? Context_KaxSegmentVLC
> + : EBML_CONTEXT(m_el[mi_level - 1]);
> /* Ignore unknown level 0 or 1 elements */
> - m_el[mi_level] = m_es->FindNextElement( EBML_CONTEXT(m_el[mi_level -
> 1]),
> + m_el[mi_level] = m_es->FindNextElement( e_context,
> i_ulev, UINT64_MAX,
> ( mb_dummy | (mi_level > 1)
> ), 1 );
> if( i_ulev > 0 )
> diff --git a/modules/demux/mkv/Ebml_parser.hpp
> b/modules/demux/mkv/Ebml_parser.hpp
> index 57fdf23..96f9f4b 100644
> --- a/modules/demux/mkv/Ebml_parser.hpp
> +++ b/modules/demux/mkv/Ebml_parser.hpp
> @@ -60,6 +60,7 @@ class EbmlParser
>
> int mi_user_level;
> bool mb_keep;
> + /* Allow dummy/unknown EBML elements */
> bool mb_dummy;
> };
>
>
> _______________________________________________
> vlc-commits mailing list
> vlc-commits at videolan.org
> https://mailman.videolan.org/listinfo/vlc-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20150220/bf319a47/attachment.html>
More information about the vlc-devel
mailing list