mediabunny 1.7.3 → 1.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5607,7 +5607,7 @@ var Mediabunny = (() => {
5607
5607
  };
5608
5608
  var MAX_VAR_INT_SIZE = 8;
5609
5609
  var MIN_HEADER_SIZE = 2;
5610
- var MAX_HEADER_SIZE = 4 + MAX_VAR_INT_SIZE;
5610
+ var MAX_HEADER_SIZE = 2 * MAX_VAR_INT_SIZE;
5611
5611
  var EBMLReader = class {
5612
5612
  constructor(reader) {
5613
5613
  this.reader = reader;
@@ -5631,9 +5631,12 @@ var Mediabunny = (() => {
5631
5631
  readVarIntSize() {
5632
5632
  const { view: view2, offset } = this.reader.getViewAndOffset(this.pos, this.pos + 1);
5633
5633
  const firstByte = view2.getUint8(offset);
5634
+ if (firstByte === 0) {
5635
+ return null;
5636
+ }
5634
5637
  let width = 1;
5635
5638
  let mask = 128;
5636
- while ((firstByte & mask) === 0 && width < 8) {
5639
+ while ((firstByte & mask) === 0) {
5637
5640
  width++;
5638
5641
  mask >>= 1;
5639
5642
  }
@@ -5642,9 +5645,12 @@ var Mediabunny = (() => {
5642
5645
  readVarInt() {
5643
5646
  const { view: view2, offset } = this.reader.getViewAndOffset(this.pos, this.pos + 1);
5644
5647
  const firstByte = view2.getUint8(offset);
5648
+ if (firstByte === 0) {
5649
+ return null;
5650
+ }
5645
5651
  let width = 1;
5646
5652
  let mask = 1 << 7;
5647
- while ((firstByte & mask) === 0 && width < MAX_VAR_INT_SIZE) {
5653
+ while ((firstByte & mask) === 0) {
5648
5654
  width++;
5649
5655
  mask >>= 1;
5650
5656
  }
@@ -5700,6 +5706,9 @@ var Mediabunny = (() => {
5700
5706
  }
5701
5707
  readElementId() {
5702
5708
  const size = this.readVarIntSize();
5709
+ if (size === null) {
5710
+ return null;
5711
+ }
5703
5712
  const id = this.readUnsignedInt(size);
5704
5713
  return id;
5705
5714
  }
@@ -5718,6 +5727,9 @@ var Mediabunny = (() => {
5718
5727
  }
5719
5728
  readElementHeader() {
5720
5729
  const id = this.readElementId();
5730
+ if (id === null) {
5731
+ return null;
5732
+ }
5721
5733
  const size = this.readElementSize();
5722
5734
  return { id, size };
5723
5735
  }
@@ -5725,12 +5737,15 @@ var Mediabunny = (() => {
5725
5737
  async searchForNextElementId(ids, until) {
5726
5738
  const loadChunkSize = 2 ** 20;
5727
5739
  const idsSet = new Set(ids);
5728
- while (this.pos < until - MAX_HEADER_SIZE) {
5729
- if (!this.reader.rangeIsLoaded(this.pos, this.pos + MAX_HEADER_SIZE)) {
5740
+ while (this.pos <= until - MIN_HEADER_SIZE) {
5741
+ if (!this.reader.rangeIsLoaded(this.pos, Math.min(this.pos + MAX_HEADER_SIZE, until))) {
5730
5742
  await this.reader.loadRange(this.pos, Math.min(this.pos + loadChunkSize, until));
5731
5743
  }
5732
5744
  const elementStartPos = this.pos;
5733
5745
  const elementHeader = this.readElementHeader();
5746
+ if (!elementHeader) {
5747
+ break;
5748
+ }
5734
5749
  if (idsSet.has(elementHeader.id)) {
5735
5750
  return elementStartPos;
5736
5751
  }
@@ -14292,6 +14307,9 @@ ${cue.notes ?? ""}`;
14292
14307
  this.metadataReader.pos + MAX_HEADER_SIZE
14293
14308
  );
14294
14309
  const header = this.metadataReader.readElementHeader();
14310
+ if (!header) {
14311
+ break;
14312
+ }
14295
14313
  const id = header.id;
14296
14314
  let size = header.size;
14297
14315
  const startPos = this.metadataReader.pos;
@@ -14347,13 +14365,17 @@ ${cue.notes ?? ""}`;
14347
14365
  this.metadataReader.pos + 2 ** 14
14348
14366
  );
14349
14367
  let clusterEncountered = false;
14350
- while (this.metadataReader.pos < this.currentSegment.elementEndPos) {
14368
+ while (this.metadataReader.pos <= this.currentSegment.elementEndPos - MIN_HEADER_SIZE) {
14351
14369
  await this.metadataReader.reader.loadRange(
14352
14370
  this.metadataReader.pos,
14353
14371
  this.metadataReader.pos + MAX_HEADER_SIZE
14354
14372
  );
14355
14373
  const elementStartPos = this.metadataReader.pos;
14356
- const { id, size } = this.metadataReader.readElementHeader();
14374
+ const header = this.metadataReader.readElementHeader();
14375
+ if (!header) {
14376
+ break;
14377
+ }
14378
+ const { id, size } = header;
14357
14379
  const dataStartPos = this.metadataReader.pos;
14358
14380
  const metadataElementIndex = METADATA_ELEMENTS.findIndex((x) => x.id === id);
14359
14381
  if (metadataElementIndex !== -1) {
@@ -14406,7 +14428,9 @@ ${cue.notes ?? ""}`;
14406
14428
  this.metadataReader.pos + 2 ** 12
14407
14429
  // Load a larger range, assuming the correct element will be there
14408
14430
  );
14409
- const { id, size } = this.metadataReader.readElementHeader();
14431
+ const header = this.metadataReader.readElementHeader();
14432
+ if (!header) continue;
14433
+ const { id, size } = header;
14410
14434
  if (id !== target.id) continue;
14411
14435
  assertDefinedSize(size);
14412
14436
  this.currentSegment[target.flag] = true;
@@ -14457,6 +14481,7 @@ ${cue.notes ?? ""}`;
14457
14481
  await this.metadataReader.reader.loadRange(this.metadataReader.pos, this.metadataReader.pos + MAX_HEADER_SIZE);
14458
14482
  const elementStartPos = this.metadataReader.pos;
14459
14483
  const elementHeader = this.metadataReader.readElementHeader();
14484
+ assert(elementHeader);
14460
14485
  const id = elementHeader.id;
14461
14486
  let size = elementHeader.size;
14462
14487
  const dataStartPos = this.metadataReader.pos;
@@ -14641,11 +14666,18 @@ ${cue.notes ?? ""}`;
14641
14666
  readContiguousElements(reader, totalSize) {
14642
14667
  const startIndex = reader.pos;
14643
14668
  while (reader.pos - startIndex <= totalSize - MIN_HEADER_SIZE) {
14644
- this.traverseElement(reader);
14669
+ const foundElement = this.traverseElement(reader);
14670
+ if (!foundElement) {
14671
+ break;
14672
+ }
14645
14673
  }
14646
14674
  }
14647
14675
  traverseElement(reader) {
14648
- const { id, size } = reader.readElementHeader();
14676
+ const header = reader.readElementHeader();
14677
+ if (!header) {
14678
+ return false;
14679
+ }
14680
+ const { id, size } = header;
14649
14681
  const dataStartPos = reader.pos;
14650
14682
  assertDefinedSize(size);
14651
14683
  switch (id) {
@@ -15042,6 +15074,7 @@ ${cue.notes ?? ""}`;
15042
15074
  {
15043
15075
  if (!this.currentCluster) break;
15044
15076
  const trackNumber = reader.readVarInt();
15077
+ if (trackNumber === null) break;
15045
15078
  const relativeTimestamp = reader.readS16();
15046
15079
  const flags = reader.readU8();
15047
15080
  const isKeyFrame = !!(flags & 128);
@@ -15077,6 +15110,7 @@ ${cue.notes ?? ""}`;
15077
15110
  {
15078
15111
  if (!this.currentCluster) break;
15079
15112
  const trackNumber = reader.readVarInt();
15113
+ if (trackNumber === null) break;
15080
15114
  const relativeTimestamp = reader.readS16();
15081
15115
  const flags = reader.readU8();
15082
15116
  const lacing = flags >> 1 & 3;
@@ -15113,6 +15147,7 @@ ${cue.notes ?? ""}`;
15113
15147
  break;
15114
15148
  }
15115
15149
  reader.pos = dataStartPos + size;
15150
+ return true;
15116
15151
  }
15117
15152
  };
15118
15153
  var MatroskaTrackBacking = class {
@@ -15412,7 +15447,7 @@ ${cue.notes ?? ""}`;
15412
15447
  metadataReader.pos = cuePoint.clusterPosition;
15413
15448
  }
15414
15449
  }
15415
- while (metadataReader.pos < segment.elementEndPos) {
15450
+ while (metadataReader.pos <= segment.elementEndPos - MIN_HEADER_SIZE) {
15416
15451
  if (prevCluster) {
15417
15452
  const trackData = prevCluster.trackData.get(this.internalTrack.id);
15418
15453
  if (trackData && trackData.startTimestamp > latestTimestamp) {
@@ -15427,6 +15462,9 @@ ${cue.notes ?? ""}`;
15427
15462
  await metadataReader.reader.loadRange(metadataReader.pos, metadataReader.pos + MAX_HEADER_SIZE);
15428
15463
  const elementStartPos = metadataReader.pos;
15429
15464
  const elementHeader = metadataReader.readElementHeader();
15465
+ if (!elementHeader) {
15466
+ break;
15467
+ }
15430
15468
  const id = elementHeader.id;
15431
15469
  let size = elementHeader.size;
15432
15470
  const dataStartPos = metadataReader.pos;
@@ -16632,6 +16670,9 @@ ${cue.notes ?? ""}`;
16632
16670
  return "video/quicktime";
16633
16671
  }
16634
16672
  };
16673
+ function foo() {
16674
+ return 5;
16675
+ }
16635
16676
  var MatroskaInputFormat = class extends InputFormat {
16636
16677
  /** @internal */
16637
16678
  async isSupportedEBMLOfDocType(input, desiredDocType) {
@@ -16641,6 +16682,10 @@ ${cue.notes ?? ""}`;
16641
16682
  }
16642
16683
  const ebmlReader = new EBMLReader(input._mainReader);
16643
16684
  const varIntSize = ebmlReader.readVarIntSize();
16685
+ if (varIntSize === null) {
16686
+ return false;
16687
+ }
16688
+ foo();
16644
16689
  if (varIntSize < 1 || varIntSize > 8) {
16645
16690
  return false;
16646
16691
  }
@@ -16653,8 +16698,10 @@ ${cue.notes ?? ""}`;
16653
16698
  return false;
16654
16699
  }
16655
16700
  const startPos = ebmlReader.pos;
16656
- while (ebmlReader.pos < startPos + dataSize) {
16657
- const { id: id2, size } = ebmlReader.readElementHeader();
16701
+ while (ebmlReader.pos <= startPos + dataSize - MIN_HEADER_SIZE) {
16702
+ const header = ebmlReader.readElementHeader();
16703
+ if (!header) break;
16704
+ const { id: id2, size } = header;
16658
16705
  const dataStartPos = ebmlReader.pos;
16659
16706
  if (size === null) return false;
16660
16707
  switch (id2) {
@@ -17297,7 +17344,7 @@ ${cue.notes ?? ""}`;
17297
17344
  return;
17298
17345
  }
17299
17346
  let adjustedSampleTimestamp = Math.max(timestamp - this._startTimestamp, 0);
17300
- lastCanvasEndTimestamp = timestamp + duration;
17347
+ lastCanvasEndTimestamp = adjustedSampleTimestamp + duration;
17301
17348
  if (frameRate !== void 0) {
17302
17349
  const alignedTimestamp = Math.floor(adjustedSampleTimestamp * frameRate) / frameRate;
17303
17350
  if (lastCanvas !== null) {
@@ -17359,7 +17406,7 @@ ${cue.notes ?? ""}`;
17359
17406
  return;
17360
17407
  }
17361
17408
  let adjustedSampleTimestamp = Math.max(sample.timestamp - this._startTimestamp, 0);
17362
- lastSampleEndTimestamp = sample.timestamp + sample.duration;
17409
+ lastSampleEndTimestamp = adjustedSampleTimestamp + sample.duration;
17363
17410
  if (frameRate !== void 0) {
17364
17411
  const alignedTimestamp = Math.floor(adjustedSampleTimestamp * frameRate) / frameRate;
17365
17412
  if (lastSample !== null) {