From 0b0ca8995d409694ec6904b2159516afea715a46 Mon Sep 17 00:00:00 2001 From: Alexandre Ratchov Date: Mon, 29 Oct 2012 15:32:51 +0100 Subject: [PATCH] tighter boundary checks --- sndiod/siofile.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sndiod/siofile.c b/sndiod/siofile.c index e1f3542..8cb2827 100644 --- a/sndiod/siofile.c +++ b/sndiod/siofile.c @@ -376,18 +376,18 @@ siofile_run(void *arg) if (!siofile_rec(f)) return; #ifdef DEBUG - if (f->rused < d->round) { + f->rused -= d->round; + if (f->rused >= d->round) { siofile_log(f); - log_puts(": missed clock tick, rused = "); + log_puts(": rec hw xrun, rused = "); log_puti(f->rused); log_puts("/"); log_puti(d->bufsz); log_puts("\n"); panic(); } - f->rused -= d->round; - if (f->rused < 0) { - /* rec buffer size is not known */ + if (f->rused < 0 || f->rused >= d->bufsz) { + /* device driver or libsndio bug */ siofile_log(f); log_puts(": out of bounds rused = "); log_puti(f->rused); @@ -415,7 +415,7 @@ siofile_run(void *arg) return; #ifdef DEBUG f->pused += d->round; - if (d->prime == 0 && f->pused < d->bufsz - d->round) { + if (d->prime == 0 && f->pused <= d->bufsz - d->round) { siofile_log(f); log_puts(": play hw xrun, pused = "); log_puti(f->pused); @@ -424,7 +424,7 @@ siofile_run(void *arg) log_puts("\n"); } if (f->pused < 0 || f->pused > d->bufsz) { - /* this is a device drivers or libsndio bug */ + /* device driver or libsndio bug */ siofile_log(f); log_puts(": out of bounds pused = "); log_puti(f->pused);