Skip to content

api: fix out-of-bounds on lone-error handler returns#670

Open
parkan wants to merge 2 commits intomainfrom
fix/api-one-result-oob
Open

api: fix out-of-bounds on lone-error handler returns#670
parkan wants to merge 2 commits intomainfrom
fix/api-one-result-oob

Conversation

@parkan
Copy link
Copy Markdown
Collaborator

@parkan parkan commented Apr 23, 2026

Summary

  • api/api.go dispatch had results[1] in the len(results) == 1 branch, which indexes past the end for any handler whose signature is just error (e.g. ResetHandler, InitHandler, RemovePreparationHandler, every RemoveHandler, etc.).
  • Any non-nil error return on those handlers panicked the Echo request goroutine instead of producing an HTTP error response.
  • Fix: read results[0] -- the only result value is the error itself.

Test plan

  • go test ./api/...
  • CI

parkan added a commit that referenced this pull request Apr 23, 2026
## Summary
PR #669 added \`//go:generate make -C sol bytecode\` to
\`util/testutil/fvm_precompiles.go\`, which calls \`forge build\` +
\`forge inspect\`. The devcontainer's Dockerfile only copied \`anvil\`
from the Foundry image, not \`forge\`.

Effect: CI's \"Generate swagger code\" step runs \`go generate ./...\`
whenever codegen-gated paths (\`api/\`, \`handler/\`, \`cmd/\`,
\`storagesystem/\`, \`docs/gen/\`, \`model/\`, \`singularity.go\`,
\`docgen.sh\`) change. On those PRs, \`make -C sol bytecode\` fails with
\`forge: No such file or directory\`.

Currently blocks #670, #673, #674.

## Test plan
- [ ] CI devcontainer build includes \`/usr/local/bin/forge\`
- [ ] \`go generate ./...\` succeeds inside the devcontainer
@parkan parkan force-pushed the fix/api-one-result-oob branch from a3e1b10 to 4b9c72e Compare April 23, 2026 15:56
parkan added a commit that referenced this pull request Apr 23, 2026
## Summary
\`forge inspect\` appends a CBOR metadata section to the
deployedBytecode: an IPFS hash of the compiler metadata JSON plus the
solc version tag. That IPFS hash drifts between forge versions even with
\`solc\` pinned in \`foundry.toml\`. Locally (forge 1.5.1) it matches
what was committed in #669; in CI (\`foundry:latest\`, newer) \`go
generate ./...\` produces different trailing bytes and \`git diff
--exit-code\` fails.

Fix: \`bytecode_hash = \"none\"\` + \`cbor_metadata = false\` -- solc
omits the metadata section entirely. Output is deterministic across
forge versions and solc patches. Regenerated the three .txt files
against the new config; runtime bytecode is unchanged (FVM precompile
mocks don't consult the metadata).

Currently blocks #670, #673, #674 after #675 unblocked the
missing-\`forge\` issue.

## Test plan
- [x] \`make -C util/testutil/sol clean bytecode\` produces the
committed output under forge 1.5.1
- [x] \`go test ./util/testutil/...\` pass
- [x] \`go test ./service/dealpusher/...\` pass (DDO / PDP mocks
exercise the stripped bytecode)
- [ ] CI
When a registered handler returns only an error (e.g. ResetHandler,
InitHandler, RemovePreparationHandler), len(results) == 1. The branch
that handles this case was indexing results[1] to extract the error,
which panics the request goroutine on any non-nil error.

Use results[0] since the only result value is the error itself.
@parkan parkan force-pushed the fix/api-one-result-oob branch from 4b9c72e to d0ab925 Compare April 23, 2026 17:32
@parkan parkan requested a review from anjor April 23, 2026 19:05
@parkan parkan enabled auto-merge (squash) April 24, 2026 14:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants