mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-29 23:32:04 +02:00
This limit should be probably removed completely, but I am increasing it for the time being to avoid problems with detecting attached subtitles in matroska files.
68 lines
2.5 KiB
Diff
68 lines
2.5 KiB
Diff
From b2ad7c68c3478c433a0ede4aed6afb2f0b32702c Mon Sep 17 00:00:00 2001
|
|
From: Rafostar <40623528+Rafostar@users.noreply.github.com>
|
|
Date: Sun, 10 Jan 2021 15:44:45 +0100
|
|
Subject: [PATCH] matroska: fix attachments detection in large data blocks
|
|
|
|
Due to max block size limit being set to 15MB, large
|
|
attachments (fonts of few MB in size) were undetected
|
|
as attachments consist of single data block. Raise max
|
|
data block limit to 30MB to fix that.
|
|
---
|
|
gst/matroska/matroska-demux.c | 34 ++++++++++++++++------------------
|
|
1 file changed, 16 insertions(+), 18 deletions(-)
|
|
|
|
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
|
|
index 4d0234743..ce906e5a3 100644
|
|
--- a/gst/matroska/matroska-demux.c
|
|
+++ b/gst/matroska/matroska-demux.c
|
|
@@ -5115,30 +5115,28 @@ gst_matroska_demux_parse_contents (GstMatroskaDemux * demux, GstEbmlRead * ebml)
|
|
}
|
|
|
|
#define GST_FLOW_OVERFLOW GST_FLOW_CUSTOM_ERROR
|
|
-
|
|
-#define MAX_BLOCK_SIZE (15 * 1024 * 1024)
|
|
+#define MAX_BLOCK_SIZE (60 * 1024 * 1024)
|
|
|
|
static inline GstFlowReturn
|
|
gst_matroska_demux_check_read_size (GstMatroskaDemux * demux, guint64 bytes)
|
|
{
|
|
- if (G_UNLIKELY (bytes > MAX_BLOCK_SIZE)) {
|
|
- /* only a few blocks are expected/allowed to be large,
|
|
- * and will be recursed into, whereas others will be read and must fit */
|
|
- if (demux->streaming) {
|
|
- /* fatal in streaming case, as we can't step over easily */
|
|
- GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
|
|
- ("reading large block of size %" G_GUINT64_FORMAT " not supported; "
|
|
- "file might be corrupt.", bytes));
|
|
- return GST_FLOW_ERROR;
|
|
- } else {
|
|
- /* indicate higher level to quietly give up */
|
|
- GST_DEBUG_OBJECT (demux,
|
|
- "too large block of size %" G_GUINT64_FORMAT, bytes);
|
|
- return GST_FLOW_ERROR;
|
|
- }
|
|
- } else {
|
|
+ if (G_LIKELY (bytes <= MAX_BLOCK_SIZE))
|
|
return GST_FLOW_OK;
|
|
+
|
|
+ /* only a few blocks are expected/allowed to be large,
|
|
+ * and will be recursed into, whereas others will be read and must fit */
|
|
+ if (demux->streaming) {
|
|
+ /* fatal in streaming case, as we can't step over easily */
|
|
+ GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
|
|
+ ("reading large block of size %" G_GUINT64_FORMAT " not supported; "
|
|
+ "file might be corrupt.", bytes));
|
|
+ } else {
|
|
+ /* indicate higher level to quietly give up */
|
|
+ GST_DEBUG_OBJECT (demux, "too large block of size %" G_GUINT64_FORMAT,
|
|
+ bytes);
|
|
}
|
|
+
|
|
+ return GST_FLOW_ERROR;
|
|
}
|
|
|
|
/* returns TRUE if we truly are in error state, and should give up */
|
|
--
|
|
2.29.2
|
|
|