%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
'use strict'; const common = require('../common'); const assert = require('assert'); const http = require('http'); const MakeDuplexPair = require('../common/duplexpair'); // Regression test for the crash reported in // https://github.com/nodejs/node/issues/15102 (httpParser.finish() is called // during httpParser.execute()): { const { clientSide, serverSide } = MakeDuplexPair(); serverSide.on('data', common.mustCall((data) => { assert.strictEqual(data.toString('utf8'), `\ GET / HTTP/1.1 Expect: 100-continue Host: localhost:80 Connection: close `.replace(/\n/g, '\r\n')); setImmediate(() => { serverSide.write('HTTP/1.1 100 Continue\r\n\r\n'); }); })); const req = http.request({ createConnection: common.mustCall(() => clientSide), headers: { 'Expect': '100-continue' } }); req.on('continue', common.mustCall((res) => { let sync = true; clientSide._writev = null; clientSide._write = common.mustCall((chunk, enc, cb) => { assert(sync); // On affected versions of Node.js, the error would be emitted on `req` // synchronously (i.e. before commit f663b31cc2aec), which would cause // parser.finish() to be called while we are here in the 'continue' // callback, which is inside a parser.execute() call. assert.strictEqual(chunk.length, 4); clientSide.destroy(new Error('sometimes the code just doesn’t work'), cb); }); req.on('error', common.mustCall()); req.end('data'); sync = false; })); }