don't swallow random exceptions (#11)

This commit is contained in:
Jacek Sieka 2019-04-22 19:31:12 -06:00 committed by GitHub
parent e1dbd76e1f
commit e1af5a0c02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 8 additions and 6 deletions

View File

@ -384,7 +384,7 @@ proc decodeAuthMessageEip8(h: var Handshake, m: openarray[byte]): AuthStatus =
h.remoteHPubkey = pubkey h.remoteHPubkey = pubkey
h.version = cast[ptr byte](versionBr.baseAddr)[] h.version = cast[ptr byte](versionBr.baseAddr)[]
result = Success result = Success
except: except CatchableError:
result = RlpError result = RlpError
proc decodeAckMessageEip8*(h: var Handshake, m: openarray[byte]): AuthStatus = proc decodeAckMessageEip8*(h: var Handshake, m: openarray[byte]): AuthStatus =
@ -417,7 +417,7 @@ proc decodeAckMessageEip8*(h: var Handshake, m: openarray[byte]): AuthStatus =
copyMem(addr h.responderNonce[0], nonceBr.baseAddr, KeyLength) copyMem(addr h.responderNonce[0], nonceBr.baseAddr, KeyLength)
h.version = cast[ptr byte](versionBr.baseAddr)[] h.version = cast[ptr byte](versionBr.baseAddr)[]
result = Success result = Success
except: except CatchableError:
result = RlpError result = RlpError
proc decodeAckMessageV4(h: var Handshake, m: openarray[byte]): AuthStatus = proc decodeAckMessageV4(h: var Handshake, m: openarray[byte]): AuthStatus =

View File

@ -164,7 +164,7 @@ proc obtainBlocksFromPeer(syncCtx: SyncContext, peer: Peer) {.async.} =
if bestBlockNumber > syncCtx.endBlockNumber: if bestBlockNumber > syncCtx.endBlockNumber:
trace "New sync end block number", number = bestBlockNumber trace "New sync end block number", number = bestBlockNumber
syncCtx.endBlockNumber = bestBlockNumber syncCtx.endBlockNumber = bestBlockNumber
except: except CatchableError:
debug "Exception in getBestBlockNumber()", debug "Exception in getBestBlockNumber()",
exc = getCurrentException().name, exc = getCurrentException().name,
err = getCurrentExceptionMsg() err = getCurrentExceptionMsg()
@ -210,7 +210,7 @@ proc obtainBlocksFromPeer(syncCtx: SyncContext, peer: Peer) {.async.} =
dataReceived = true dataReceived = true
else: else:
warn "Bodies len != headers.len", bodies = bodies.len, headers = workItem.headers.len warn "Bodies len != headers.len", bodies = bodies.len, headers = workItem.headers.len
except: except CatchableError:
# the success case sets `dataReceived`, so we can just fall back to the # the success case sets `dataReceived`, so we can just fall back to the
# failure path below. If we signal time-outs with exceptions such # failure path below. If we signal time-outs with exceptions such
# failures will be easier to handle. # failures will be easier to handle.
@ -231,7 +231,7 @@ proc obtainBlocksFromPeer(syncCtx: SyncContext, peer: Peer) {.async.} =
workItem.state = Initial workItem.state = Initial
try: try:
await peer.disconnect(SubprotocolReason) await peer.disconnect(SubprotocolReason)
except: except CatchableError:
discard discard
syncCtx.handleLostPeer() syncCtx.handleLostPeer()
break break
@ -318,7 +318,7 @@ proc onPeerConnected(ctx: SyncContext, peer: Peer) =
f.callback = proc(data: pointer) {.gcsafe.} = f.callback = proc(data: pointer) {.gcsafe.} =
if f.failed: if f.failed:
error "startSyncWithPeer failed", msg = f.readError.msg, peer error "startSyncWithPeer failed", msg = f.readError.msg, peer
except: except CatchableError:
debug "Exception in startSyncWithPeer()", debug "Exception in startSyncWithPeer()",
exc = getCurrentException().name, exc = getCurrentException().name,
err = getCurrentExceptionMsg() err = getCurrentExceptionMsg()

View File

@ -258,6 +258,7 @@ proc processClient(transp: DatagramTransport,
proto.receive(a, buf) proto.receive(a, buf)
except: except:
debug "Receive failed", err = getCurrentExceptionMsg() debug "Receive failed", err = getCurrentExceptionMsg()
raise
proc open*(d: DiscoveryProtocol) = proc open*(d: DiscoveryProtocol) =
# TODO allow binding to specific IP / IPv6 / etc # TODO allow binding to specific IP / IPv6 / etc

View File

@ -198,6 +198,7 @@ proc requestResolver[MsgType](msg: pointer, future: FutureBase) {.gcsafe.} =
debug "Exception in requestResolver()", debug "Exception in requestResolver()",
exc = getCurrentException().name, exc = getCurrentException().name,
err = getCurrentExceptionMsg() err = getCurrentExceptionMsg()
raise
proc registerMsg(protocol: ProtocolInfo, proc registerMsg(protocol: ProtocolInfo,
id: int, name: string, id: int, name: string,