| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -466,12 +466,12 @@ class FileTest extends Test { | |||
| 466 | 466 | while (bufferHead?.length >= kSerializedSizeHeader) { | |
| 467 | 467 | // We call `readUInt32BE` manually here, because this is faster than first converting | |
| 468 | 468 | // it to a buffer and using `readUInt32BE` on that. | |
| 469 | - const fullMessageSize = ( | ||
| 469 | + const fullMessageSize = (( | ||
| 470 | 470 | bufferHead[kV8HeaderLength] << 24 | | |
| 471 | 471 | bufferHead[kV8HeaderLength + 1] << 16 | | |
| 472 | 472 | bufferHead[kV8HeaderLength + 2] << 8 | | |
| 473 | 473 | bufferHead[kV8HeaderLength + 3] | |
| 474 | - ) + kSerializedSizeHeader; | ||
| 474 | + ) >>> 0) + kSerializedSizeHeader; | ||
| 475 | 475 | ||
| 476 | 476 | if (this.#rawBufferSize < fullMessageSize) break; | |
| 477 | 477 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -30,12 +30,15 @@ defaultSerializer.writeHeader(); | |||
| 30 | 30 | const headerLength = defaultSerializer.releaseBuffer().length; | |
| 31 | 31 | const headerOnly = Buffer.from([0xff, 0x0f]); | |
| 32 | 32 | const oversizedLengthHeader = Buffer.from([0xff, 0x0f, 0x7f, 0xff, 0xff, 0xff]); | |
| 33 | + const unsignedOversizedLengthHeader = Buffer.from([0xff, 0x0f, 0x80, 0x00, 0x00, 0x00]); | ||
| 33 | 34 | const truncatedLengthHeader = Buffer.from([0xff, 0x0f, 0x00, 0x01, 0x00, 0x00]); | |
| 34 | 35 | // Expected stdout for oversizedLengthHeader: first byte is emitted via | |
| 35 | 36 | // String.fromCharCode (byte-by-byte fallback in #drainRawBuffer), remaining | |
| 36 | 37 | // bytes go through the nonSerialized UTF-8 decode path in #processRawBuffer. | |
| 37 | 38 | const oversizedLengthStdout = String.fromCharCode(oversizedLengthHeader[0]) + | |
| 38 | 39 | Buffer.from(oversizedLengthHeader.subarray(1)).toString('utf-8'); | |
| 40 | + const unsignedOversizedLengthStdout = String.fromCharCode(unsignedOversizedLengthHeader[0]) + | ||
| 41 | + Buffer.from(unsignedOversizedLengthHeader.subarray(1)).toString('utf-8'); | ||
| 39 | 42 | ||
| 40 | 43 | function collectStdout(reported) { | |
| 41 | 44 | return reported | |
@@ -112,6 +115,12 @@ describe('v8 deserializer', common.mustCall(() => { | |||
| 112 | 115 | assert.strictEqual(collectStdout(reported), oversizedLengthStdout); | |
| 113 | 116 | }); | |
| 114 | 117 | ||
| 118 | + it('should read an oversized length as an unsigned integer', async () => { | ||
| 119 | + const reported = await collectReported([unsignedOversizedLengthHeader]); | ||
| 120 | + assert(reported.every((event) => event.type === 'test:stdout')); | ||
| 121 | + assert.strictEqual(collectStdout(reported), unsignedOversizedLengthStdout); | ||
| 122 | + }); | ||
| 123 | + | ||
| 115 | 124 | it('should flush incomplete v8 frame as stdout and keep prior valid data', async () => { | |
| 116 | 125 | // A valid non-serialized message followed by bytes that look like | |
| 117 | 126 | // a v8 header with a truncated/oversized length. | |
| Back | FazBrowse Home | New Git URL |
0 commit comments