2424const {
2525 ArrayIsArray,
2626 Error,
27+ FunctionPrototypeBind,
28+ FunctionPrototypeCall,
2729 ObjectKeys,
2830 ObjectSetPrototypeOf,
2931 Symbol,
@@ -169,7 +171,7 @@ class HTTPServerAsyncResource {
169171}
170172
171173function ServerResponse ( req ) {
172- OutgoingMessage . call ( this ) ;
174+ FunctionPrototypeCall ( OutgoingMessage , this ) ;
173175
174176 if ( req . method === 'HEAD' ) this . _hasBody = false ;
175177
@@ -197,7 +199,7 @@ ServerResponse.prototype._finish = function _finish() {
197199 if ( this [ kServerResponseStatistics ] !== undefined ) {
198200 emitStatistics ( this [ kServerResponseStatistics ] ) ;
199201 }
200- OutgoingMessage . prototype . _finish . call ( this ) ;
202+ FunctionPrototypeCall ( OutgoingMessage . prototype . _finish , this ) ;
201203} ;
202204
203205
@@ -371,7 +373,7 @@ function Server(options, requestListener) {
371373 validateBoolean ( insecureHTTPParser , 'options.insecureHTTPParser' ) ;
372374 this . insecureHTTPParser = insecureHTTPParser ;
373375
374- net . Server . call ( this , { allowHalfOpen : true } ) ;
376+ FunctionPrototypeCall ( net . Server , this , { allowHalfOpen : true } ) ;
375377
376378 if ( requestListener ) {
377379 this . on ( 'request' , requestListener ) ;
@@ -477,16 +479,21 @@ function connectionListenerInternal(server, socket) {
477479 outgoingData : 0 ,
478480 keepAliveTimeoutSet : false
479481 } ;
480- state . onData = socketOnData . bind ( undefined , server , socket , parser , state ) ;
481- state . onEnd = socketOnEnd . bind ( undefined , server , socket , parser , state ) ;
482- state . onClose = socketOnClose . bind ( undefined , socket , state ) ;
483- state . onDrain = socketOnDrain . bind ( undefined , socket , state ) ;
482+ state . onData = FunctionPrototypeBind ( socketOnData , undefined , server ,
483+ socket , parser , state ) ;
484+ state . onEnd = FunctionPrototypeBind ( socketOnEnd , undefined , server ,
485+ socket , parser , state ) ;
486+ state . onClose = FunctionPrototypeBind ( socketOnClose , undefined ,
487+ socket , state ) ;
488+ state . onDrain = FunctionPrototypeBind ( socketOnDrain , undefined ,
489+ socket , state ) ;
484490 socket . on ( 'data' , state . onData ) ;
485491 socket . on ( 'error' , socketOnError ) ;
486492 socket . on ( 'end' , state . onEnd ) ;
487493 socket . on ( 'close' , state . onClose ) ;
488494 socket . on ( 'drain' , state . onDrain ) ;
489- parser . onIncoming = parserOnIncoming . bind ( undefined , server , socket , state ) ;
495+ parser . onIncoming = FunctionPrototypeBind ( parserOnIncoming , undefined , server ,
496+ socket , state ) ;
490497
491498 // We are consuming socket, so it won't get any actual data
492499 socket . on ( 'resume' , onSocketResume ) ;
@@ -505,16 +512,22 @@ function connectionListenerInternal(server, socket) {
505512 socket . _handle . _consumed = true ;
506513 parser . consume ( socket . _handle ) ;
507514 }
508- parser [ kOnExecute ] =
509- onParserExecute . bind ( undefined , server , socket , parser , state ) ;
515+ parser [ kOnExecute ] = FunctionPrototypeBind (
516+ onParserExecute ,
517+ undefined ,
518+ server ,
519+ socket ,
520+ parser ,
521+ state
522+ ) ;
510523
511524 parser [ kOnTimeout ] =
512- onParserTimeout . bind ( undefined , server , socket ) ;
525+ FunctionPrototypeBind ( onParserTimeout , undefined , server , socket ) ;
513526
514527 // When receiving new requests on the same socket (pipelining or keep alive)
515528 // make sure the requestTimeout is active.
516529 parser [ kOnMessageBegin ] =
517- setRequestTimeout . bind ( undefined , server , socket ) ;
530+ FunctionPrototypeBind ( setRequestTimeout , undefined , server , socket ) ;
518531
519532 // This protects from DOS attack where an attacker establish the connection
520533 // without sending any data on applications where server.timeout is left to
@@ -592,7 +605,7 @@ function socketOnEnd(server, socket, parser, state) {
592605
593606 if ( ret instanceof Error ) {
594607 debug ( 'parse error' ) ;
595- socketOnError . call ( socket , ret ) ;
608+ FunctionPrototypeCall ( socketOnError , socket , ret ) ;
596609 return ;
597610 }
598611
@@ -618,7 +631,7 @@ function socketOnData(server, socket, parser, state, d) {
618631
619632function onRequestTimeout ( socket ) {
620633 socket [ kRequestTimeout ] = undefined ;
621- socketOnError . call ( socket , new ERR_HTTP_REQUEST_TIMEOUT ( ) ) ;
634+ FunctionPrototypeCall ( socketOnError , socket , new ERR_HTTP_REQUEST_TIMEOUT ( ) ) ;
622635}
623636
624637function onParserExecute ( server , socket , parser , state , ret ) {
@@ -685,7 +698,7 @@ function onParserExecuteCommon(server, socket, parser, state, ret, d) {
685698 prepareError ( ret , parser , d ) ;
686699 ret . rawPacket = d || parser . getCurrentBuffer ( ) ;
687700 debug ( 'parse error' , ret ) ;
688- socketOnError . call ( socket , ret ) ;
701+ FunctionPrototypeCall ( socketOnError , socket , ret ) ;
689702 } else if ( parser . incoming && parser . incoming . upgrade ) {
690703 // Upgrade or CONNECT
691704 const req = parser . incoming ;
@@ -724,7 +737,7 @@ function onParserExecuteCommon(server, socket, parser, state, ret, d) {
724737 // When receiving new requests on the same socket (pipelining or keep alive)
725738 // make sure the requestTimeout is active.
726739 parser [ kOnMessageBegin ] =
727- setRequestTimeout . bind ( undefined , server , socket ) ;
740+ FunctionPrototypeBind ( setRequestTimeout , undefined , server , socket ) ;
728741 }
729742
730743 if ( socket . _paused && socket . parser ) {
@@ -870,7 +883,8 @@ function parserOnIncoming(server, socket, state, req, keepAlive) {
870883
871884 const res = new server [ kServerResponse ] ( req ) ;
872885 res . _keepAliveTimeout = server . keepAliveTimeout ;
873- res . _onPendingData = updateOutgoingData . bind ( undefined , socket , state ) ;
886+ res . _onPendingData =
887+ FunctionPrototypeBind ( updateOutgoingData , undefined , socket , state ) ;
874888
875889 res . shouldKeepAlive = keepAlive ;
876890 DTRACE_HTTP_SERVER_REQUEST ( req , socket ) ;
@@ -894,7 +908,8 @@ function parserOnIncoming(server, socket, state, req, keepAlive) {
894908 // When we're finished writing the response, check if this is the last
895909 // response, if so destroy the socket.
896910 res . on ( 'finish' ,
897- resOnFinish . bind ( undefined , req , res , socket , state , server ) ) ;
911+ FunctionPrototypeBind ( resOnFinish , undefined , req , res ,
912+ socket , state , server ) ) ;
898913
899914 if ( req . headers . expect !== undefined &&
900915 ( req . httpVersionMajor === 1 && req . httpVersionMinor === 1 ) ) {
@@ -966,7 +981,10 @@ function unconsume(parser, socket) {
966981
967982function generateSocketListenerWrapper ( originalFnName ) {
968983 return function socketListenerWrap ( ev , fn ) {
969- const res = net . Socket . prototype [ originalFnName ] . call ( this , ev , fn ) ;
984+ const res = FunctionPrototypeCall (
985+ net . Socket . prototype [ originalFnName ] ,
986+ this , ev , fn
987+ ) ;
970988 if ( ! this . parser ) {
971989 this . on = net . Socket . prototype . on ;
972990 this . addListener = net . Socket . prototype . addListener ;
0 commit comments