tighter boundary checks

This commit is contained in:
Alexandre Ratchov 2012-10-29 15:32:51 +01:00
parent 766895ba25
commit 0b0ca8995d
1 changed files with 7 additions and 7 deletions

View File

@ -376,18 +376,18 @@ siofile_run(void *arg)
if (!siofile_rec(f)) if (!siofile_rec(f))
return; return;
#ifdef DEBUG #ifdef DEBUG
if (f->rused < d->round) { f->rused -= d->round;
if (f->rused >= d->round) {
siofile_log(f); siofile_log(f);
log_puts(": missed clock tick, rused = "); log_puts(": rec hw xrun, rused = ");
log_puti(f->rused); log_puti(f->rused);
log_puts("/"); log_puts("/");
log_puti(d->bufsz); log_puti(d->bufsz);
log_puts("\n"); log_puts("\n");
panic(); panic();
} }
f->rused -= d->round; if (f->rused < 0 || f->rused >= d->bufsz) {
if (f->rused < 0) { /* device driver or libsndio bug */
/* rec buffer size is not known */
siofile_log(f); siofile_log(f);
log_puts(": out of bounds rused = "); log_puts(": out of bounds rused = ");
log_puti(f->rused); log_puti(f->rused);
@ -415,7 +415,7 @@ siofile_run(void *arg)
return; return;
#ifdef DEBUG #ifdef DEBUG
f->pused += d->round; 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); siofile_log(f);
log_puts(": play hw xrun, pused = "); log_puts(": play hw xrun, pused = ");
log_puti(f->pused); log_puti(f->pused);
@ -424,7 +424,7 @@ siofile_run(void *arg)
log_puts("\n"); log_puts("\n");
} }
if (f->pused < 0 || f->pused > d->bufsz) { if (f->pused < 0 || f->pused > d->bufsz) {
/* this is a device drivers or libsndio bug */ /* device driver or libsndio bug */
siofile_log(f); siofile_log(f);
log_puts(": out of bounds pused = "); log_puts(": out of bounds pused = ");
log_puti(f->pused); log_puti(f->pused);