Browse Source

Fix nil pointer panic in access tracker goroutine

Add recover() and capacity check to prevent crash when event ID slice
has corrupted header (nil data pointer with non-zero length).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
main
woikos 4 months ago
parent
commit
e8c50abe1b
No known key found for this signature in database
  1. 8
      app/handle-req.go

8
app/handle-req.go

@ -733,9 +733,15 @@ func (l *Listener) HandleReq(msg []byte) (err error) { @@ -733,9 +733,15 @@ func (l *Listener) HandleReq(msg []byte) (err error) {
// Record access for returned events (for GC access-based ranking)
if l.accessTracker != nil && len(events) > 0 {
go func(evts event.S, connID string) {
defer func() {
if r := recover(); r != nil {
log.W.F("access tracker panic (recovered): %v", r)
}
}()
for _, ev := range evts {
// Validate event ID before calling GetSerialById
if len(ev.ID) != 32 {
// Check both length and capacity to catch corrupted slice headers
if len(ev.ID) != 32 || cap(ev.ID) < 32 {
continue
}
if ser, err := l.DB.GetSerialById(ev.ID); err == nil && ser != nil {

Loading…
Cancel
Save