[vlc-devel] [PATCH] contrib:ebml: Do not use elements with an unknown size if it's not allowed

Steve Lhomme robux4 at videolabs.io
Wed Dec 6 09:36:23 CET 2017


---
 contrib/src/ebml/rules.mak           |  1 +
 contrib/src/ebml/unknown-check.patch | 43 ++++++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 contrib/src/ebml/unknown-check.patch

diff --git a/contrib/src/ebml/rules.mak b/contrib/src/ebml/rules.mak
index cb5667e8eb..d77032a08e 100644
--- a/contrib/src/ebml/rules.mak
+++ b/contrib/src/ebml/rules.mak
@@ -11,6 +11,7 @@ $(TARBALLS)/libebml-$(EBML_VERSION).tar.xz:
 ebml: libebml-$(EBML_VERSION).tar.xz .sum-ebml
 	$(UNPACK)
 	$(APPLY) $(SRC)/ebml/ebml-maxread.patch
+	$(APPLY) $(SRC)/ebml/unknown-check.patch
 	$(MOVE)
 
 # libebml requires exceptions
diff --git a/contrib/src/ebml/unknown-check.patch b/contrib/src/ebml/unknown-check.patch
new file mode 100644
index 0000000000..895a4d664e
--- /dev/null
+++ b/contrib/src/ebml/unknown-check.patch
@@ -0,0 +1,43 @@
+From ff0dc3cc21494578ce731f5d7dcde5fdec23d40f Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <slhomme at matroska.org>
+Date: Wed, 6 Dec 2017 09:32:13 +0100
+Subject: [PATCH] Do not output an element with size Unknown if it's not
+ allowed
+
+Similar to what is done in FindNextID().
+
+SetSizeInfinite() doesn't actually set anything. SetSizeIsFinite() is the one
+that actually sets it and it is an internal API.
+---
+ src/EbmlElement.cpp | 14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/src/EbmlElement.cpp b/src/EbmlElement.cpp
+index ae4441e..ac0be41 100644
+--- a/src/EbmlElement.cpp
++++ b/src/EbmlElement.cpp
+@@ -461,15 +461,13 @@ EbmlElement * EbmlElement::FindNextElement(IOCallback & DataStream, const EbmlSe
+           //  1 : same level
+           //  + : further parent
+           if (Result->ValidateSize() && (SizeFound == SizeUnknown || UpperLevel > 0 || MaxDataSize == 0 || MaxDataSize >= (PossibleID_Length + PossibleSizeLength + SizeFound))) {
+-            if (SizeFound == SizeUnknown) {
+-              Result->SetSizeInfinite();
++            if (SizeFound != SizeUnknown || Result->SetSizeInfinite()) {
++              Result->SizePosition = DataStream.getFilePointer() - SizeIdx + EBML_ID_LENGTH(PossibleID);
++              Result->ElementPosition = Result->SizePosition - EBML_ID_LENGTH(PossibleID);
++              // place the file at the beggining of the data
++              DataStream.setFilePointer(Result->SizePosition + _SizeLength);
++              return Result;
+             }
+-
+-            Result->SizePosition = DataStream.getFilePointer() - SizeIdx + EBML_ID_LENGTH(PossibleID);
+-            Result->ElementPosition = Result->SizePosition - EBML_ID_LENGTH(PossibleID);
+-            // place the file at the beggining of the data
+-            DataStream.setFilePointer(Result->SizePosition + _SizeLength);
+-            return Result;
+           }
+         }
+         delete Result;
+-- 
+2.10.1.windows.1
+
-- 
2.14.2



More information about the vlc-devel mailing list