Prover assignment will fail for custom inputs
Description
In sdk/prover/assign.go, the assignCustomInput function does not work correctly for input not being nil. The function is passed the argument input of type *sdkproto.CustomInput. The struct sdkproto.CustomInput has a field JsonBytes that contains the data to be used as custom input. It should also be possible to pass nil as input when there is no custom input. For this, the function contains the following snippet,
// Support empty customInput
jsonBytes := ""
if input == nil {
jsonBytes = "{}"
}where jsonBytes is set to "{}" when input is nil. After this, input is not used anymore, and in particular jsonBytes is not updated to use input.JsonBytes if input was not nil. Because of this, the TestAssignCustomInput test in assign_test.go fails.
Impact
The function assignCustomInput will not work correctly when custom inputs are used. Ultimately, this function is used for assignments by Prove and ProveAsync in sdk/prover/server.go, and so proving circuits with custom inputs will fail.
Recommendations
To fix this, an else branch should be added to use the jsonBytes from input if input is not nil:
// Support empty customInput
jsonBytes := ""
if input == nil {
jsonBytes = "{}"
+ } else {
+ jsonBytes = input.JsonBytes
}Remediation
This issue has been acknowledged by Brevis, and a fix was implemented in commit 90248b80↗.