Skip to content

Commit 1f83c0d

Browse files
committed
Fix potential cash in mythtranscode.
Fixes #10084
1 parent 472e500 commit 1f83c0d

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

mythtv/programs/mythtranscode/transcode.cpp

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ class AudioReencodeBuffer : public AudioOutput
4646
audiobuffer = new unsigned char[bufsize];
4747

4848
ab_count = 0;
49-
memset(ab_len, 0, sizeof(ab_len));
50-
memset(ab_offset, 0, sizeof(ab_offset));
51-
memset(ab_time, 0, sizeof(ab_time));
49+
ab_size = 128;
50+
ab = new AudioBuffer[ab_size];
5251
m_initpassthru = passthru;
5352
}
5453

5554
~AudioReencodeBuffer()
5655
{
5756
delete [] audiobuffer;
57+
delete [] ab;
5858
}
5959

6060
// reconfigure sound out for new params
@@ -102,9 +102,16 @@ class AudioReencodeBuffer : public AudioOutput
102102
delete [] audiobuffer;
103103
audiobuffer = tmpbuf;
104104
}
105-
106-
ab_len[ab_count] = len;
107-
ab_offset[ab_count] = audiobuffer_len;
105+
if (ab_count >= ab_size)
106+
{
107+
AudioBuffer *tmp = new AudioBuffer[ab_size + 128];
108+
memcpy(tmp, ab, sizeof(AudioBuffer) * ab_size);
109+
delete[] ab;
110+
ab = tmp;
111+
ab_size += 128;
112+
}
113+
ab[ab_count].len = len;
114+
ab[ab_count].offset = audiobuffer_len;
108115

109116
memcpy(audiobuffer + audiobuffer_len, buffer,
110117
len);
@@ -115,7 +122,7 @@ class AudioReencodeBuffer : public AudioOutput
115122
last_audiotime = timecode + frames * 1000 /
116123
eff_audiorate;
117124

118-
ab_time[ab_count] = last_audiotime;
125+
ab[ab_count].time = last_audiotime;
119126
ab_count++;
120127

121128
return true;
@@ -219,10 +226,15 @@ class AudioReencodeBuffer : public AudioOutput
219226
{ return m_initpassthru; }
220227

221228
int bufsize;
222-
int ab_count;
223-
int ab_len[128];
224-
int ab_offset[128];
225-
long long ab_time[128];
229+
uint ab_count;
230+
struct AudioBuffer
231+
{
232+
int len;
233+
int offset;
234+
long long time;
235+
};
236+
AudioBuffer *ab;
237+
uint ab_size;
226238
unsigned char *audiobuffer;
227239
int audiobuffer_len, audiobuffer_frames;
228240
int channels, bits, bytes_per_frame, eff_audiorate;
@@ -1095,12 +1107,12 @@ int Transcode::TranscodeFile(
10951107
audioframesize = arb->audiobuffer_len;
10961108
if (arb->ab_count)
10971109
{
1098-
for (int loop = 0; loop < arb->ab_count; loop++)
1110+
for (uint loop = 0; loop < arb->ab_count; loop++)
10991111
{
1100-
nvr->SetOption("audioframesize", arb->ab_len[loop]);
1101-
nvr->WriteAudio(arb->audiobuffer + arb->ab_offset[loop],
1112+
nvr->SetOption("audioframesize", arb->ab[loop].len);
1113+
nvr->WriteAudio(arb->audiobuffer + arb->ab[loop].offset,
11021114
audioFrame++,
1103-
arb->ab_time[loop] - timecodeOffset);
1115+
arb->ab[loop].time - timecodeOffset);
11041116
if (nvr->IsErrored())
11051117
{
11061118
VERBOSE(VB_IMPORTANT, "Transcode: Encountered "

0 commit comments

Comments
 (0)