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))
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);