1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-22 06:42:03 +00:00

vo_opengl: fix out-of-bounds access in timer_pool_measure

This was there even before the refactor, but the refactor exposed the
bug. I hate C's useless fucking modulo operator so much. I've gotten hit
by this exact bug way too many times.
This commit is contained in:
Niklas Haas 2017-09-11 02:07:04 +02:00
parent 0fe4a492c4
commit 8a4f2f0ac0
No known key found for this signature in database
GPG Key ID: 9A09076581B27402

View File

@ -293,8 +293,9 @@ struct mp_pass_perf timer_pool_measure(struct timer_pool *pool)
if (!pool) if (!pool)
return (struct mp_pass_perf){0}; return (struct mp_pass_perf){0};
int last = (pool->sample_idx ? pool->sample_idx : VO_PERF_SAMPLE_COUNT) - 1;
struct mp_pass_perf res = { struct mp_pass_perf res = {
.last = pool->samples[(pool->sample_idx - 1) % VO_PERF_SAMPLE_COUNT], .last = pool->samples[last],
.avg = pool->sample_count > 0 ? pool->sum / pool->sample_count : 0, .avg = pool->sample_count > 0 ? pool->sum / pool->sample_count : 0,
.peak = pool->peak, .peak = pool->peak,
.count = pool->sample_count, .count = pool->sample_count,