summaryrefslogtreecommitdiffstats
path: root/libfaad2
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2009-02-28 10:06:52 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2009-02-28 10:06:52 +0000
commitd1acb189028448087cee36a78d0b64b024422966 (patch)
tree1f1024a6c59c6cbbceb484668b10db288ea8e7e8 /libfaad2
parent3a81bf82a0415753790c8fc09e8020d6e0e22f67 (diff)
downloadmpv-d1acb189028448087cee36a78d0b64b024422966.tar.bz2
mpv-d1acb189028448087cee36a78d0b64b024422966.tar.xz
Fix a possible NULL-pointer crash introduced by local changes to libfaad2
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28757 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libfaad2')
-rw-r--r--libfaad2/local_changes.diff5
-rw-r--r--libfaad2/specrec.c3
2 files changed, 5 insertions, 3 deletions
diff --git a/libfaad2/local_changes.diff b/libfaad2/local_changes.diff
index 0e3fe95d41..db2b60cd68 100644
--- a/libfaad2/local_changes.diff
+++ b/libfaad2/local_changes.diff
@@ -360,7 +360,7 @@
}
#endif
-@@ -865,22 +842,13 @@
+@@ -865,22 +842,14 @@
/* always allocate 2 channels, PS can always "suddenly" turn up */
#if (defined(PS_DEC) || defined(DRM_PS))
@@ -373,7 +373,8 @@
- if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
- {
- /* element_output_channels not set yet */
-+ if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] < output_channels) {
++ if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0 ||
++ hDecoder->element_output_channels[hDecoder->fr_ch_ele] < output_channels) {
hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
- } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
- /* element inconsistency */
diff --git a/libfaad2/specrec.c b/libfaad2/specrec.c
index 1119dd3b53..d4d600916f 100644
--- a/libfaad2/specrec.c
+++ b/libfaad2/specrec.c
@@ -847,7 +847,8 @@ uint8_t reconstruct_single_channel(NeAACDecHandle hDecoder, ic_stream *ics,
output_channels = 1;
#endif
- if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] < output_channels) {
+ if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0 ||
+ hDecoder->element_output_channels[hDecoder->fr_ch_ele] < output_channels) {
hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
if (retval > 0)