Skip to content

Commit 70d1124

Browse files
avivkelleraduh95
authored andcommitted
test_runner: convert to uint during deserialization
Signed-off-by: Aviv Keller <me@aviv.sh> PR-URL: #64706 Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
1 parent 796acc8 commit 70d1124

2 files changed

Lines changed: 11 additions & 2 deletions

File tree

‎lib/internal/test_runner/runner.js‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -466,12 +466,12 @@ class FileTest extends Test {
466466
while(bufferHead?.length>=kSerializedSizeHeader){
467467
// We call `readUInt32BE` manually here, because this is faster than first converting
468468
// it to a buffer and using `readUInt32BE` on that.
469-
constfullMessageSize=(
469+
constfullMessageSize=((
470470
bufferHead[kV8HeaderLength]<<24|
471471
bufferHead[kV8HeaderLength+1]<<16|
472472
bufferHead[kV8HeaderLength+2]<<8|
473473
bufferHead[kV8HeaderLength+3]
474-
)+kSerializedSizeHeader;
474+
)>>>0)+kSerializedSizeHeader;
475475

476476
if(this.#rawBufferSize <fullMessageSize)break;
477477

‎test/parallel/test-runner-v8-deserializer.mjs‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@ defaultSerializer.writeHeader();
3030
constheaderLength=defaultSerializer.releaseBuffer().length;
3131
constheaderOnly=Buffer.from([0xff,0x0f]);
3232
constoversizedLengthHeader=Buffer.from([0xff,0x0f,0x7f,0xff,0xff,0xff]);
33+
constunsignedOversizedLengthHeader=Buffer.from([0xff,0x0f,0x80,0x00,0x00,0x00]);
3334
consttruncatedLengthHeader=Buffer.from([0xff,0x0f,0x00,0x01,0x00,0x00]);
3435
// Expected stdout for oversizedLengthHeader: first byte is emitted via
3536
// String.fromCharCode (byte-by-byte fallback in #drainRawBuffer), remaining
3637
// bytes go through the nonSerialized UTF-8 decode path in #processRawBuffer.
3738
constoversizedLengthStdout=String.fromCharCode(oversizedLengthHeader[0])+
3839
Buffer.from(oversizedLengthHeader.subarray(1)).toString('utf-8');
40+
constunsignedOversizedLengthStdout=String.fromCharCode(unsignedOversizedLengthHeader[0])+
41+
Buffer.from(unsignedOversizedLengthHeader.subarray(1)).toString('utf-8');
3942

4043
functioncollectStdout(reported){
4144
returnreported
@@ -112,6 +115,12 @@ describe('v8 deserializer', common.mustCall(() => {
112115
assert.strictEqual(collectStdout(reported),oversizedLengthStdout);
113116
});
114117

118+
it('should read an oversized length as an unsigned integer',async()=>{
119+
constreported=awaitcollectReported([unsignedOversizedLengthHeader]);
120+
assert(reported.every((event)=>event.type==='test:stdout'));
121+
assert.strictEqual(collectStdout(reported),unsignedOversizedLengthStdout);
122+
});
123+
115124
it('should flush incomplete v8 frame as stdout and keep prior valid data',async()=>{
116125
// A valid non-serialized message followed by bytes that look like
117126
// a v8 header with a truncated/oversized length.

0 commit comments

Comments
 (0)