Files
bitcoin/src/test/fuzz
merge-script 30f6b05857 Merge bitcoin/bitcoin#35860: fuzz: Rework rpc fuzz target
fa895bb77a fuzz: Rework rpc fuzz target (MarcoFalke)

Pull request description:

  The `rpc` fuzz target constructs a vector of string args and passes that to `RPCConvertValues`.

  This has many issues:

  * Each of those strings could represent an array itself. E.g. via `range argument` or via `ConsumeArrayRPCArgument`. However, those strings may not be converted to an array via `RPCConvertValues` and just be passed on as string argument. Having a call to `ConsumeArrayRPCArgument` that ends up with a plain json string is confusing.
  * The strings could only represent an object or json null, when a raw string represented such a serialized json and was also converted to one via `RPCConvertValues`. Having a call to `ConsumeScalarRPCArgument` that was intended to give a raw string but ends up with a arbitrary json object is confusing.

  Fix those "stringly-typed" issues by making the fuzz target "type safe":

  * Rename `ConsumeScalarRPCArgument` to `ConsumeBasicRPCArgument` and return a proper `UniValue` from it.
  * The "consume string" case inside that function, which had a "double meaning" is turned into two type-safe cases: One that returns a json string and one that reads an arbitrary json from a string.
  * A new case for json null is added.
  * `ConsumeRPCArgument` is changed to cover both json arrays and json dicts properly.
  * Pass the resulting positional UniValue array directly to the RPC method, avoiding the need for `RPCConvertValues`.

  Making the fuzz target "type safe" is also the first step in making it schema-aware.

ACKs for top commit:
  dergoegge:
    utACK fa895bb77a

Tree-SHA512: ee22310c981be802f4838454be0e7ef2be213704621c08ffe98dbeab2e3d7cc6ff6a37f7a129e1570185f13a740d34fd9e2c6de3a8281e8b8dc1277f673c4a48
2026-08-03 12:17:52 +01:00
..
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-17 22:55:22 -07:00
2026-05-12 21:24:19 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-08-01 16:40:46 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-14 13:48:33 +02:00
2026-07-03 18:26:26 +01:00
2026-07-14 13:48:33 +02:00