shadow1ng/fscan · error
result cannot be nil
Error message
result cannot be nil
What it means
Argument guard in Manager.SaveResult: the method was invoked with a nil *ScanResult, which cannot be serialized to any output writer. It is a programmer/API-contract error (caller passed nil), distinct from the 'output manager is closed' state check that precedes it.
Source
Thrown at common/output/manager.go:81
if err != nil {
return err
}
m.writer = writer
return m.writer.WriteHeader()
}
// SaveResult 保存扫描结果
func (m *Manager) SaveResult(result *ScanResult) error {
m.mu.RLock()
defer m.mu.RUnlock()
if m.closed {
return fmt.Errorf("output manager is closed")
}
if result == nil {
return fmt.Errorf("result cannot be nil")
}
return m.writer.Write(result)
}
// Flush 刷新输出
func (m *Manager) Flush() error {
m.mu.RLock()
defer m.mu.RUnlock()
if m.closed {
return fmt.Errorf("output manager is closed")
}
return m.writer.Flush()
}
// Close 关闭输出管理器View on GitHub (pinned to 95cc12e753)
Solutions
- Check results for nil before calling SaveResult
- Ensure scan functions return an error alongside nil results so callers can skip
- Filter nil entries out of result slices before persisting
Example fix
// before
mgr.SaveResult(res) // res may be nil
// after
if res != nil {
mgr.SaveResult(res)
} Defensive patterns
Strategy: type-guard
Validate before calling
if res == nil {
return errors.New("no scan result to save")
}
return mgr.SaveResult(res) Type guard
func hasResult(r *ScanResult) bool { return r != nil } Try / catch
if err := mgr.SaveResult(res); err != nil {
if strings.Contains(err.Error(), "result cannot be nil") {
log.Debug("skipping nil result")
return nil
}
return err
} Prevention
- Nil-check results before saving
- Make scan functions return an error with nil results
- Filter nil entries from slices before persisting
When it happens
Trigger: Passing nil to SaveResult, e.g. when a scan stage produced no result or an upstream function returned (nil, nil) and the caller forwards it unchecked.
Common situations: Pipeline code where a failed probe returns nil result without an error, appending nil in a results slice and flushing it, tests like TestManager_SaveNilResult.
Related errors
- result cannot be nil
- output config cannot be nil
- unsupported format: %s
- output manager is closed
- failed to create TXT file: %w
AI-assisted analysis of shadow1ng/fscan@95cc12e753 (2026-09-06).
Data as JSON: /api/errors/19fe1fc7f25f1c76.
Report an issue: GitHub.