Externals/FreeSurround: Fix pointer created through new[] being freed via delete
Doing so is not allowed (presumably because compilers are allowed to use a different algorithm for allocating between the two/store extra data such as the length of the array before the pointer). This bug existed in the original implementation at https://web.archive.org/web/20140708092159/http://www.hydrogenaud.io/forums/index.php?showtopic=52235 and causes Valgrind to emit a warning. Note that this ended up happening even if DSPLLE and the DPL decoder are not enabled in Dolphin.
This commit is contained in:
parent
19bf13d3bb
commit
a7026ca6d3
|
@ -31,10 +31,8 @@ DPL2FSDecoder::DPL2FSDecoder() {
|
||||||
}
|
}
|
||||||
|
|
||||||
DPL2FSDecoder::~DPL2FSDecoder() {
|
DPL2FSDecoder::~DPL2FSDecoder() {
|
||||||
#pragma warning(suppress : 4150)
|
kiss_fftr_free(forward);
|
||||||
delete forward;
|
kiss_fftr_free(inverse);
|
||||||
#pragma warning(suppress : 4150)
|
|
||||||
delete inverse;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DPL2FSDecoder::Init(channel_setup chsetup, unsigned int blsize,
|
void DPL2FSDecoder::Init(channel_setup chsetup, unsigned int blsize,
|
||||||
|
|
|
@ -65,7 +65,7 @@ kiss_fftr_cfg kiss_fftr_alloc(int nfft, int inverse_fft, void *mem,
|
||||||
sizeof(kiss_fft_cpx) * (nfft * 3 / 2);
|
sizeof(kiss_fft_cpx) * (nfft * 3 / 2);
|
||||||
|
|
||||||
if (lenmem == NULL) {
|
if (lenmem == NULL) {
|
||||||
st = (kiss_fftr_cfg) new char[memneeded];
|
st = (kiss_fftr_cfg)malloc(memneeded);
|
||||||
} else {
|
} else {
|
||||||
if (*lenmem >= memneeded)
|
if (*lenmem >= memneeded)
|
||||||
st = (kiss_fftr_cfg)mem;
|
st = (kiss_fftr_cfg)mem;
|
||||||
|
|
Loading…
Reference in New Issue