summaryrefslogtreecommitdiffstats
path: root/contrib/ffmpeg/A10-dcadec-false-overread.patch
diff options
context:
space:
mode:
authorTim Walker <[email protected]>2015-11-22 00:26:54 +0100
committerTim Walker <[email protected]>2015-11-22 00:26:54 +0100
commitf73a58dfd617103fa5fcc9530ff1079669d96d71 (patch)
treef3621e70627ed4f0cb107e1b0888609fb2e3ebb2 /contrib/ffmpeg/A10-dcadec-false-overread.patch
parent6c731e1353608b909ce1e721e9b31b2fea6f932c (diff)
libav: remove a pointless check in the DTS decoder.
The check resulted in an error with many real-world streams, which are otherwise perfectly valid. The auxiliary data length is not reliable and/or the ETSI DTS specification is incorrect.
Diffstat (limited to 'contrib/ffmpeg/A10-dcadec-false-overread.patch')
-rw-r--r--contrib/ffmpeg/A10-dcadec-false-overread.patch23
1 files changed, 23 insertions, 0 deletions
diff --git a/contrib/ffmpeg/A10-dcadec-false-overread.patch b/contrib/ffmpeg/A10-dcadec-false-overread.patch
new file mode 100644
index 000000000..50ca00169
--- /dev/null
+++ b/contrib/ffmpeg/A10-dcadec-false-overread.patch
@@ -0,0 +1,23 @@
+diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c
+index e988e94..a72195e 100644
+--- a/libavcodec/dcadec.c
++++ b/libavcodec/dcadec.c
+@@ -1359,12 +1359,12 @@ static int dca_subframe_footer(DCAContext *s, int base_channel)
+ align_get_bits(&s->gb); // byte align
+ skip_bits(&s->gb, 16); // nAUXCRC16
+
+- // additional data (reserved, cf. ETSI TS 102 114 V1.4.1)
+- if ((reserved = (aux_data_end - get_bits_count(&s->gb))) < 0) {
+- av_log(s->avctx, AV_LOG_ERROR,
+- "Overread auxiliary data by %d bits\n", -reserved);
+- return AVERROR_INVALIDDATA;
+- } else if (reserved) {
++ /*
++ * additional data (reserved, cf. ETSI TS 102 114 V1.4.1)
++ *
++ * Note: don't check for overreads, aux_data_count can't be trusted.
++ */
++ if ((reserved = (aux_data_end - get_bits_count(&s->gb))) > 0) {
+ avpriv_request_sample(s->avctx,
+ "Core auxiliary data reserved content");
+ skip_bits_long(&s->gb, reserved);