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

View File

@ -38,7 +38,7 @@ proc readMplexVarint(conn: Connection): Future[Option[uint]] {.async, gcsafe.} =
if res == VarintStatus.Success: if res == VarintStatus.Success:
return some(varint) return some(varint)
if res != VarintStatus.Success: if res != VarintStatus.Success:
return raise newInvalidVarintException()
except LPStreamIncompleteError: except LPStreamIncompleteError:
trace "unable to read varint", exc = getCurrentExceptionMsg() trace "unable to read varint", exc = getCurrentExceptionMsg()