@thenewlabs/entangle-protocol 2.0.2 → 2.0.3

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.
package/dist/frame.d.ts CHANGED
@@ -9,7 +9,7 @@ export declare class FrameReader {
9
9
  private headerParsed;
10
10
  private currentType;
11
11
  private currentLength;
12
- private droppingOversize;
12
+ private discardRemaining;
13
13
  push(chunk: Uint8Array): Frame[];
14
14
  }
15
15
  //# sourceMappingURL=frame.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAS5E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQhG;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,gBAAgB,CAAS;IAEjC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE;CAwDjC"}
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAS5E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQhG;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,aAAa,CAAK;IAK1B,OAAO,CAAC,gBAAgB,CAAK;IAE7B,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE;CA8DjC"}
package/dist/frame.js CHANGED
@@ -19,10 +19,23 @@ export class FrameReader {
19
19
  buffer = new Uint8Array(0);
20
20
  headerParsed = false;
21
21
  currentType;
22
- currentLength;
23
- droppingOversize = false;
22
+ currentLength = 0;
23
+ // Bytes of an oversize payload still to be discarded. While > 0 incoming
24
+ // bytes are dropped WITHOUT ever entering `buffer`, so a frame declaring a
25
+ // huge (e.g. UINT64_MAX) length cannot grow memory while we wait for a
26
+ // payload that never fully arrives.
27
+ discardRemaining = 0;
24
28
  push(chunk) {
25
29
  const frames = [];
30
+ // Consume any pending oversize payload straight from the incoming chunk;
31
+ // only the unconsumed tail is ever buffered.
32
+ if (this.discardRemaining > 0) {
33
+ const drop = Math.min(this.discardRemaining, chunk.length);
34
+ this.discardRemaining -= drop;
35
+ chunk = chunk.subarray(drop);
36
+ if (this.discardRemaining > 0)
37
+ return frames;
38
+ }
26
39
  const newBuffer = new Uint8Array(this.buffer.length + chunk.length);
27
40
  newBuffer.set(this.buffer);
28
41
  newBuffer.set(chunk, this.buffer.length);
@@ -35,37 +48,35 @@ export class FrameReader {
35
48
  if (!header)
36
49
  break;
37
50
  this.currentType = header.type;
38
- this.currentLength = header.length;
39
51
  this.headerParsed = true;
40
52
  this.buffer = this.buffer.slice(9);
41
- // Enforce maximum frame size; if exceeded, drop this frame
42
- const lengthNum = Number(this.currentLength);
43
- if (lengthNum > MAX_FRAME_BYTES) {
44
- // Enter dropping mode: discard remaining buffered data for this frame
45
- this.droppingOversize = true;
46
- }
47
- }
48
- if (this.headerParsed && this.currentLength !== undefined) {
49
- const length = Number(this.currentLength);
50
- if (this.buffer.length < length)
51
- break;
52
- if (this.droppingOversize) {
53
- // Discard the oversize payload without emitting a frame
54
- this.buffer = this.buffer.slice(length);
53
+ // Reject oversize frames up front so we never buffer more than a single
54
+ // frame's worth. Discard exactly `length` payload bytes across chunks
55
+ // and emit nothing. BigInt comparison avoids precision loss for lengths
56
+ // beyond 2^53.
57
+ if (header.length > BigInt(MAX_FRAME_BYTES)) {
58
+ const available = BigInt(this.buffer.length);
59
+ const dropNow = header.length < available ? header.length : available;
60
+ this.buffer = this.buffer.slice(Number(dropNow));
61
+ this.discardRemaining = Number(header.length - dropNow);
55
62
  this.headerParsed = false;
56
63
  this.currentType = undefined;
57
- this.currentLength = undefined;
58
- this.droppingOversize = false;
64
+ if (this.discardRemaining > 0)
65
+ break;
59
66
  continue;
60
67
  }
68
+ this.currentLength = Number(header.length);
69
+ }
70
+ if (this.headerParsed) {
71
+ if (this.buffer.length < this.currentLength)
72
+ break;
61
73
  frames.push({
62
74
  type: this.currentType,
63
- payload: this.buffer.slice(0, length),
75
+ payload: this.buffer.slice(0, this.currentLength),
64
76
  });
65
- this.buffer = this.buffer.slice(length);
77
+ this.buffer = this.buffer.slice(this.currentLength);
66
78
  this.headerParsed = false;
67
79
  this.currentType = undefined;
68
- this.currentLength = undefined;
69
80
  }
70
81
  }
71
82
  return frames;
package/dist/frame.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"frame.js","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thenewlabs/entangle-protocol",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",