summaryrefslogtreecommitdiffstats
path: root/src/libdca-4-fix-random-crashes-caused-by-invalid-32-bit-shifts.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/libdca-4-fix-random-crashes-caused-by-invalid-32-bit-shifts.patch')
-rw-r--r--src/libdca-4-fix-random-crashes-caused-by-invalid-32-bit-shifts.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/libdca-4-fix-random-crashes-caused-by-invalid-32-bit-shifts.patch b/src/libdca-4-fix-random-crashes-caused-by-invalid-32-bit-shifts.patch
new file mode 100644
index 0000000..f247802
--- /dev/null
+++ b/src/libdca-4-fix-random-crashes-caused-by-invalid-32-bit-shifts.patch
@@ -0,0 +1,48 @@
+This file is part of MXE.
+See index.html for further information.
+
+Taken from libdca svn: svn://svn.videolan.org/libdca/trunk.
+
+r88 | sam | 2008-07-19 22:26:13 +0000 (Sat, 19 Jul 2008) | 2 lines
+ * bitstream.c: fix random crashes caused by invalid 32-bit shifts on 32-bit
+ values.
+
+--- libdca.orig/libdca/bitstream.c
++++ libdca/libdca/bitstream.c
+@@ -25,6 +25,7 @@
+
+ #include "config.h"
+
++#include <stdio.h>
+ #include <inttypes.h>
+
+ #include "dca.h"
+@@ -46,7 +47,7 @@
+ state->bigendian_mode = bigendian_mode;
+ bitstream_get (state, align * 8);
+ }
+-#include<stdio.h>
++
+ static inline void bitstream_fill_current (dca_state_t * state)
+ {
+ uint32_t tmp;
+@@ -76,12 +77,14 @@
+
+ uint32_t dca_bitstream_get_bh (dca_state_t * state, uint32_t num_bits)
+ {
+- uint32_t result;
+-
+- num_bits -= state->bits_left;
++ uint32_t result = 0;
+
+- result = ((state->current_word << (32 - state->bits_left)) >>
+- (32 - state->bits_left));
++ if (state->bits_left)
++ {
++ num_bits -= state->bits_left;
++ result = ((state->current_word << (32 - state->bits_left)) >>
++ (32 - state->bits_left));
++ }
+
+ if ( !state->word_mode && num_bits > 28 ) {
+ bitstream_fill_current (state);