@@ -267,8 +267,13 @@ function _doFlush () {
267
267
// Stream becomes writeable on connect() but don't flush if there's
268
268
// nothing actually to write
269
269
if ( socket . flush ( ) ) {
270
- if ( socket . _events && socket . _events [ 'drain' ] ) socket . emit ( "drain" ) ;
271
- if ( socket . ondrain ) socket . ondrain ( ) ; // Optimization
270
+ try {
271
+ if ( socket . _events && socket . _events [ 'drain' ] ) socket . emit ( "drain" ) ;
272
+ if ( socket . ondrain ) socket . ondrain ( ) ; // Optimization
273
+ } catch ( e ) {
274
+ socket . destroy ( e ) ;
275
+ return ;
276
+ }
272
277
}
273
278
}
274
279
@@ -305,7 +310,7 @@ function initStream (self) {
305
310
if ( secureBytesRead === null && ! self . server ) {
306
311
// Client needs to write as part of handshake
307
312
self . _writeWatcher . start ( ) ;
308
- return ;
313
+ return ;
309
314
}
310
315
} else {
311
316
bytesRead = read ( self . fd ,
@@ -320,7 +325,7 @@ function initStream (self) {
320
325
321
326
//debug('bytesRead ' + bytesRead + '\n');
322
327
323
- if ( self . secure && bytesRead == 0 && secureBytesRead > 0 ) {
328
+ if ( self . secure && bytesRead == 0 && secureBytesRead > 0 ) {
324
329
// Deal with SSL handshake
325
330
if ( self . server ) {
326
331
self . _checkForSecureHandshake ( ) ;
@@ -338,8 +343,13 @@ function initStream (self) {
338
343
if ( ! self . writable ) self . destroy ( ) ;
339
344
// Note: 'close' not emitted until nextTick.
340
345
341
- if ( self . _events && self . _events [ 'end' ] ) self . emit ( 'end' ) ;
342
- if ( self . onend ) self . onend ( ) ;
346
+ try {
347
+ if ( self . _events && self . _events [ 'end' ] ) self . emit ( 'end' ) ;
348
+ if ( self . onend ) self . onend ( ) ;
349
+ } catch ( e ) {
350
+ self . destroy ( e ) ;
351
+ return ;
352
+ }
343
353
} else if ( bytesRead > 0 ) {
344
354
345
355
timeout . active ( self ) ;
@@ -348,17 +358,22 @@ function initStream (self) {
348
358
var end = pool . used + bytesRead ;
349
359
pool . used += bytesRead ;
350
360
351
- if ( ! self . _encoding ) {
352
- if ( self . _events && self . _events [ 'data' ] ) {
353
- // emit a slice
354
- self . emit ( 'data' , pool . slice ( start , end ) ) ;
355
- }
361
+ try {
362
+ if ( ! self . _encoding ) {
363
+ if ( self . _events && self . _events [ 'data' ] ) {
364
+ // emit a slice
365
+ self . emit ( 'data' , pool . slice ( start , end ) ) ;
366
+ }
356
367
357
- // Optimization: emit the original buffer with end points
358
- if ( self . ondata ) self . ondata ( pool , start , end ) ;
359
- } else {
360
- var string = pool . toString ( self . _encoding , start , end ) ;
361
- self . emit ( 'data' , string ) ;
368
+ // Optimization: emit the original buffer with end points
369
+ if ( self . ondata ) self . ondata ( pool , start , end ) ;
370
+ } else {
371
+ var string = pool . toString ( self . _encoding , start , end ) ;
372
+ self . emit ( 'data' , string ) ;
373
+ }
374
+ } catch ( e ) {
375
+ self . destroy ( e ) ;
376
+ return ;
362
377
}
363
378
}
364
379
} ;
@@ -586,9 +601,14 @@ Stream.prototype._writeOut = function (data, encoding) {
586
601
} else {
587
602
var secureBytesWritten = write ( this . fd , securePool , 0 , secureLen ) ;
588
603
}
589
- if ( ! this . secureEstablished && this . secureStream . isInitFinished ( ) ) {
604
+ if ( ! this . secureEstablished && this . secureStream . isInitFinished ( ) ) {
590
605
this . secureEstablished = true ;
591
- if ( this . _events && this . _events [ 'secure' ] ) this . emit ( 'secure' ) ;
606
+ try {
607
+ if ( this . _events && this . _events [ 'secure' ] ) this . emit ( 'secure' ) ;
608
+ } catch ( e ) {
609
+ this . destroy ( e ) ;
610
+ return ;
611
+ }
592
612
}
593
613
} else {
594
614
bytesWritten = write ( this . fd , buffer , off , len ) ;
@@ -696,7 +716,12 @@ function doConnect (socket, port, host) {
696
716
socket . resume ( ) ;
697
717
socket . readable = socket . writable = true ;
698
718
socket . _writeWatcher . callback = _doFlush ;
699
- socket . emit ( 'connect' ) ;
719
+ try {
720
+ socket . emit ( 'connect' ) ;
721
+ } catch ( e ) {
722
+ socket . destroy ( e ) ;
723
+ return ;
724
+ }
700
725
} else if ( errno != EINPROGRESS ) {
701
726
socket . destroy ( errnoException ( errno , 'connect' ) ) ;
702
727
}
@@ -902,9 +927,15 @@ function Server (listener) {
902
927
s . resume ( ) ;
903
928
904
929
self . emit ( 'connection' , s ) ;
930
+
905
931
// The 'connect' event probably should be removed for server-side
906
932
// sockets. It's redundant.
907
- s . emit ( 'connect' ) ;
933
+ try {
934
+ s . emit ( 'connect' ) ;
935
+ } catch ( e ) {
936
+ s . destroy ( e ) ;
937
+ return ;
938
+ }
908
939
}
909
940
} ;
910
941
}
0 commit comments