[HTML5] Fix bug in AudioWorklet when reading output buffer.

Would attempt an out of bounds read, causing an exception.
This commit is contained in:
Fabio Alessandrelli 2021-09-14 03:38:52 +02:00
parent f2c44949c0
commit ba08f39e47
1 changed files with 7 additions and 7 deletions

View File

@ -66,17 +66,17 @@ class RingBuffer {
const mw = this.buffer.length - this.wpos; const mw = this.buffer.length - this.wpos;
if (mw >= to_write) { if (mw >= to_write) {
this.buffer.set(p_buffer, this.wpos); this.buffer.set(p_buffer, this.wpos);
this.wpos += to_write;
if (mw === to_write) {
this.wpos = 0;
}
} else { } else {
const high = p_buffer.subarray(0, to_write - mw); const high = p_buffer.subarray(0, mw);
const low = p_buffer.subarray(to_write - mw); const low = p_buffer.subarray(mw);
this.buffer.set(high, this.wpos); this.buffer.set(high, this.wpos);
this.buffer.set(low); this.buffer.set(low);
this.wpos = low.length;
} }
let diff = to_write;
if (this.wpos + diff >= this.buffer.length) {
diff -= this.buffer.length;
}
this.wpos += diff;
Atomics.add(this.avail, 0, to_write); Atomics.add(this.avail, 0, to_write);
Atomics.notify(this.avail, 0); Atomics.notify(this.avail, 0);
} }