Fixed potential out-of-bounds access caused by large s_paintedtime
This commit is contained in:
parent
776cbaf7aa
commit
73c99cdca4
|
@ -63,8 +63,8 @@ typedef struct sfx_s {
|
|||
} sfx_t;
|
||||
|
||||
typedef struct {
|
||||
int channels;
|
||||
int samples; // mono samples in buffer
|
||||
unsigned int channels;
|
||||
unsigned int samples; // mono samples in buffer
|
||||
int fullsamples; // samples with all channels in buffer (samples divided by channels)
|
||||
int submission_chunk; // don't mix less than this #
|
||||
int samplebits;
|
||||
|
|
|
@ -344,7 +344,7 @@ static void S_TransferPaintBuffer( int endtime, byte *buffer )
|
|||
p = (int *) paintbuffer;
|
||||
count = (endtime - s_paintedtime) * dma.channels;
|
||||
out_mask = dma.samples - 1;
|
||||
out_idx = s_paintedtime * dma.channels & out_mask;
|
||||
out_idx = ( s_paintedtime * dma.channels ) & out_mask;
|
||||
step = 3 - dma.channels;
|
||||
|
||||
if ( dma.samplebits == 32 && dma.isfloat )
|
||||
|
@ -397,7 +397,7 @@ static void S_TransferPaintBuffer( int endtime, byte *buffer )
|
|||
if ( CL_VideoRecording() ) {
|
||||
//count = (endtime - s_paintedtime) * dma.channels;
|
||||
count = (clc.aviFrameEndTime - s_paintedtime) * dma.channels;
|
||||
out_idx = s_paintedtime * dma.channels % dma.samples;
|
||||
out_idx = ( s_paintedtime * dma.channels ) % dma.samples;
|
||||
while ( count > 0 ) {
|
||||
int n = count;
|
||||
if ( n + out_idx > dma.samples )
|
||||
|
|
Loading…
Reference in New Issue