◐ Shell
clean mode source ↗

inspector: fix crash when receiving non json message · nodejs/node@003121c

1+

'use strict';

2+

const common = require('../common');

3+

common.skipIfInspectorDisabled();

4+

const { spawn } = require('node:child_process');

5+

const assert = require('node:assert');

6+7+

(async () => {

8+

const child = spawn(

9+

process.execPath,

10+

['--inspect-wait=0', '-e', "console.log('test');"],

11+

{}

12+

);

13+14+

const url = await new Promise((resolve) => {

15+

child.stderr.on('data', (data) => {

16+

const msg = data.toString();

17+

const match = msg.match(/ws:\/\/127\.0\.0\.1:(\d+)\/([a-f0-9-]+)/);

18+

if (match) {

19+

child.stderr.removeAllListeners('data');

20+

return resolve(match[0]);

21+

}

22+

});

23+

});

24+25+

child.once('exit', (_, signal) => {

26+

assert.strictEqual(signal, 'SIGTERM');

27+

});

28+29+

const socket = new WebSocket(url);

30+31+

socket.addEventListener('open', common.mustCall(() => {

32+

socket.send('This is not a valid protocol message');

33+

}));

34+35+

socket.addEventListener('message', common.mustCall((event) => {

36+

assert.ok(Object.keys(JSON.parse(event.data)).includes('error'));

37+

socket.close();

38+

child.kill();

39+

}));

40+

})().then(common.mustCall());