audio: avoid read overflows in the poem timestamps/lines buffers
This commit is contained in:
parent
76b3edcf1b
commit
057ba291d8
4
Makefile
4
Makefile
@ -7,7 +7,7 @@ OBJARCH = elf64-x86-64
|
|||||||
|
|
||||||
UNAME := $(shell uname -s)
|
UNAME := $(shell uname -s)
|
||||||
|
|
||||||
OPT += -O0
|
OPT += -O3
|
||||||
OPT += -march=core-avx2
|
OPT += -march=core-avx2
|
||||||
|
|
||||||
DEBUG = -g
|
DEBUG = -g
|
||||||
@ -36,7 +36,7 @@ CFLAGS += -fpic
|
|||||||
CFLAGS += -ffunction-sections
|
CFLAGS += -ffunction-sections
|
||||||
CFLAGS += -fdata-sections
|
CFLAGS += -fdata-sections
|
||||||
|
|
||||||
FLAGS += -fstack-protector -fstack-protector-all -fno-omit-frame-pointer -fsanitize=address
|
#FLAGS += -fstack-protector -fstack-protector-all -fno-omit-frame-pointer -fsanitize=address
|
||||||
CXXFLAGS += -fno-exceptions -fno-non-call-exceptions -fno-rtti -fno-threadsafe-statics
|
CXXFLAGS += -fno-exceptions -fno-non-call-exceptions -fno-rtti -fno-threadsafe-statics
|
||||||
|
|
||||||
LDFLAGS += -lm
|
LDFLAGS += -lm
|
||||||
|
|||||||
@ -487,6 +487,7 @@ namespace audio {
|
|||||||
int poem_timestamp_index = 0;
|
int poem_timestamp_index = 0;
|
||||||
int poem_line_index = 0;
|
int poem_line_index = 0;
|
||||||
poem::poem const * poem_playing = nullptr;
|
poem::poem const * poem_playing = nullptr;
|
||||||
|
poem::poem const * next_poem_playing = nullptr;
|
||||||
|
|
||||||
void update_poem(AudioInstance & instance)
|
void update_poem(AudioInstance & instance)
|
||||||
{
|
{
|
||||||
@ -495,19 +496,23 @@ namespace audio {
|
|||||||
}
|
}
|
||||||
|
|
||||||
poem::poem const * const poem = instance.poem;
|
poem::poem const * const poem = instance.poem;
|
||||||
assert(poem_playing == nullptr);
|
assert(next_poem_playing == nullptr);
|
||||||
poem_playing = poem;
|
next_poem_playing = poem;
|
||||||
|
|
||||||
if (poem_timestamp_index < (poem->timestamps_length - 1)) {
|
if (poem_timestamp_index < (poem->timestamps_length - 1)) {
|
||||||
double time = (double)instance.sample_index / (double)sample_rate;
|
double time = (double)instance.sample_index / (double)sample_rate;
|
||||||
while (poem->timestamps[poem_timestamp_index + 1].time <= time) {
|
while (poem->timestamps[poem_timestamp_index + 1].time <= time) {
|
||||||
poem_timestamp_index += 1;
|
poem_timestamp_index += 1;
|
||||||
|
if ((poem_timestamp_index + 1) >= poem->timestamps_length)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (poem_line_index < (poem->lines_length - 1)) {
|
if (poem_line_index < (poem->lines_length - 1)) {
|
||||||
while (poem->timestamps[poem_timestamp_index].wordIndex >= poem->lines[poem_line_index].start + poem->lines[poem_line_index].length) {
|
while (poem->timestamps[poem_timestamp_index].wordIndex >= poem->lines[poem_line_index].start + poem->lines[poem_line_index].length) {
|
||||||
poem_line_index += 1;
|
poem_line_index += 1;
|
||||||
|
if (poem_line_index >= poem->lines_length)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -535,12 +540,13 @@ namespace audio {
|
|||||||
memset(&mix_buffer[0], 0, (sizeof (mix_buffer)));
|
memset(&mix_buffer[0], 0, (sizeof (mix_buffer)));
|
||||||
memset(&channel_buffer[0][0], 0, (sizeof (channel_buffer)));
|
memset(&channel_buffer[0][0], 0, (sizeof (channel_buffer)));
|
||||||
|
|
||||||
poem_playing = nullptr;
|
next_poem_playing = nullptr;
|
||||||
for (int i = 0; i < audio_instances_count; i++) {
|
for (int i = 0; i < audio_instances_count; i++) {
|
||||||
update_instance(channel_buffer[getMixChannel(audio_instances[i])], audio_instances[i]);
|
update_instance(channel_buffer[getMixChannel(audio_instances[i])], audio_instances[i]);
|
||||||
|
|
||||||
update_poem(audio_instances[i]);
|
update_poem(audio_instances[i]);
|
||||||
}
|
}
|
||||||
|
poem_playing = next_poem_playing;
|
||||||
|
|
||||||
bool culled = true;
|
bool culled = true;
|
||||||
while (culled) {
|
while (culled) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user