in src/utils.js [224:242]
_readVector(length, cb) {
const contentsBuf = new BufferReader(this.readBytes(length));
const expectedEnd = this.tell();
// Keep calling the callback until we've consumed the expected number of bytes.
let n = 0;
while (contentsBuf.hasMoreBytes()) {
const prevPos = contentsBuf.tell();
cb(contentsBuf, n);
// Check that the callback made forward progress, otherwise we'll infinite loop.
if (contentsBuf.tell() <= prevPos) {
throw new TLSError(ALERT_DESCRIPTION.DECODE_ERROR);
}
n += 1;
}
// Check that the callback correctly consumed the vector's entire contents.
if (this.tell() !== expectedEnd) {
throw new TLSError(ALERT_DESCRIPTION.DECODE_ERROR);
}
}