connection should raise on invalid varint

This commit is contained in:
Dmitriy Ryajov 2019-09-25 16:56:53 -06:00
parent 15bae7bec5
commit bc46a76029
2 changed files with 9 additions and 4 deletions

View File

@ -23,6 +23,11 @@ type
stream*: LPStream
observedAddrs*: Multiaddress
InvalidVarintException = object of LPStreamError
proc newInvalidVarintException*(): ref InvalidVarintException =
result = newException(InvalidVarintException, "unable to prase varint")
proc newConnection*(stream: LPStream): Connection =
## create a new Connection for the specified async reader/writer
new result
@ -92,7 +97,7 @@ proc readLp*(s: Connection): Future[seq[byte]] {.async, gcsafe.} =
if res == VarintStatus.Success:
break
if res != VarintStatus.Success or size > DefaultReadSize:
return
raise newInvalidVarintException()
result.setLen(size)
if size > 0.uint:
await s.readExactly(addr result[0], int(size))

View File

@ -19,8 +19,8 @@ logScope:
topic = "mplex-coder"
type
Msg* = tuple
id: uint
Msg* = tuple
id: uint
msgType: MessageType
data: seq[byte]
@ -38,7 +38,7 @@ proc readMplexVarint(conn: Connection): Future[Option[uint]] {.async, gcsafe.} =
if res == VarintStatus.Success:
return some(varint)
if res != VarintStatus.Success:
return
raise newInvalidVarintException()
except LPStreamIncompleteError:
trace "unable to read varint", exc = getCurrentExceptionMsg()