mirror of
https://github.com/vacp2p/nim-libp2p.git
synced 2026-01-10 06:38:07 -05:00
Compare commits
1 Commits
fix/quic-t
...
fuzzing
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2cdd740709 |
11
tests/fuzzing/build.nims
Executable file
11
tests/fuzzing/build.nims
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env nim
|
||||
|
||||
import strutils, os
|
||||
|
||||
withDir "../../":
|
||||
exec "nimble install -dy"
|
||||
|
||||
for file in listFiles("."):
|
||||
if file.endsWith(".nim"):
|
||||
let execName = file[0 ..< ^4]
|
||||
exec """nim c -d:libFuzzer -d:llvmFuzzer -d:chronicles_log_level=warn --noMain --cc=clang --passC="-fsanitize=fuzzer" --passL="-fsanitize=fuzzer" -o=""" & (getEnv("BIN") / execName) & " " & file
|
||||
47
tests/fuzzing/fuzz_multistream.nim
Normal file
47
tests/fuzzing/fuzz_multistream.nim
Normal file
@@ -0,0 +1,47 @@
|
||||
import testutils/fuzzing
|
||||
import chronos
|
||||
|
||||
import ../../libp2p/stream/connection,
|
||||
../../libp2p/stream/bufferstream,
|
||||
../../libp2p/multistream,
|
||||
../../libp2p/protocols/protocol
|
||||
|
||||
type
|
||||
TestBufferStream* = ref object of BufferStream
|
||||
|
||||
method write*(s: TestBufferStream, msg: seq[byte]) {.async.} =
|
||||
discard
|
||||
|
||||
proc fuzzedStream*(s: seq[byte]): Connection =
|
||||
let res = TestBufferStream()
|
||||
res.initStream()
|
||||
discard res.pushData(s)
|
||||
return res
|
||||
|
||||
|
||||
test:
|
||||
proc atest(s: seq[byte]) {.async.} =
|
||||
let ms = MultistreamSelect.new()
|
||||
let conn = fuzzedStream(s)
|
||||
try:
|
||||
discard await ms.select(conn, @["/test/proto/1.0.0"]).wait(1.milliseconds)
|
||||
except AsyncTimeoutError, MultiStreamError, MaxSizeError, InvalidVarintError: discard
|
||||
await conn.close()
|
||||
|
||||
proc btest(s: seq[byte]) {.async.} =
|
||||
let ms = MultistreamSelect.new()
|
||||
let conn = fuzzedStream(s)
|
||||
|
||||
var protocol: LPProtocol = new LPProtocol
|
||||
proc testHandler(conn: Connection,
|
||||
proto: string):
|
||||
Future[void] {.async, gcsafe.} =
|
||||
doAssert proto == "/test/proto/1.0.0"
|
||||
|
||||
protocol.handler = testHandler
|
||||
ms.addHandler("/test/proto/1.0.0", protocol)
|
||||
try:
|
||||
await ms.handle(conn).wait(1.milliseconds)
|
||||
except AsyncTimeoutError: discard
|
||||
waitFor(atest(@payload))
|
||||
waitFor(btest(@payload))
|
||||
Reference in New Issue
Block a user