Skip to content

Commit e0dc75d

Browse files
rootulpclaude
authored andcommitted
fix(types): validate nil SignedHeader in LightClientAttackEvidence (#2923)
Closes [PROTOCO-1518](https://linear.app/celestia/issue/PROTOCO-1518/chain-halt-via-nil-signedheader-in-lightclientattackevidence). Backports [cometbft/cometbft#5757](cometbft/cometbft#5757) ([`336b47c`](cometbft/cometbft@336b47c)) to celestia-core `main`. ## Test plan - [x] `go test ./types/...` passes locally - [ ] CI green Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> (cherry picked from commit 15e142c)
1 parent 252b1bd commit e0dc75d

3 files changed

Lines changed: 7 additions & 0 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
- `[types]` Validate that `LightClientAttackEvidence.ConflictingBlock.SignedHeader`
2+
is non-nil in `ValidateBasic` to prevent a nil pointer panic during block
3+
deserialization. Backported from cometbft/cometbft#5757.

types/evidence.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,9 @@ func (l *LightClientAttackEvidence) ValidateBasic() error {
358358
}
359359

360360
// this check needs to be done before we can run validate basic
361+
if l.ConflictingBlock.SignedHeader == nil {
362+
return errors.New("conflicting block missing signed header")
363+
}
361364
if l.ConflictingBlock.Header == nil {
362365
return errors.New("conflicting block missing header")
363366
}

types/evidence_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ func TestLightClientAttackEvidenceValidation(t *testing.T) {
195195
}, false},
196196
{"Nil conflicting header", func(ev *LightClientAttackEvidence) { ev.ConflictingBlock.Header = nil }, true},
197197
{"Nil conflicting blocl", func(ev *LightClientAttackEvidence) { ev.ConflictingBlock = nil }, true},
198+
{"Nil signed header", func(ev *LightClientAttackEvidence) { ev.ConflictingBlock.SignedHeader = nil }, true},
198199
{"Nil validator set", func(ev *LightClientAttackEvidence) {
199200
ev.ConflictingBlock.ValidatorSet = &ValidatorSet{}
200201
}, true},

0 commit comments

Comments
 (0)