shadow1ng/fscan · error
result cannot be nil
Error message
result cannot be nil
What it means
Argument guard in TXTWriter.Write: the caller passed a nil *ScanResult. Nothing can be formatted or added to the result buffer/realtime backup, so the write is rejected; it is an API-contract violation, not a filesystem or state problem.
Source
Thrown at common/output/writers.go:127
realtimePath: realtimePath,
}, nil
}
// WriteHeader 写入头部
func (w *TXTWriter) WriteHeader() error {
return nil
}
// Write 收集扫描结果到分类缓冲,同时实时备份
func (w *TXTWriter) Write(result *ScanResult) error {
w.mu.Lock()
defer w.mu.Unlock()
if w.closed {
return fmt.Errorf("writer is closed")
}
if result == nil {
return fmt.Errorf("result cannot be nil")
}
// 1. 加入内存分类缓冲(用于最终有序输出)
w.buffer.Add(result)
// 2. 实时写入备份文件(防崩溃丢数据)
if w.realtimeFile != nil {
line := w.formatLine(result)
if _, err := w.realtimeFile.WriteString(line + "\n"); err != nil {
return fmt.Errorf("failed to write realtime backup: %w", err)
}
if err := w.realtimeFile.Sync(); err != nil {
return fmt.Errorf("failed to sync realtime backup: %w", err)
}
}
return nil
}View on GitHub (pinned to 95cc12e753)
Solutions
- Nil-check results before calling Write
- Fix upstream functions to return an error whenever the result is nil
- Filter nil entries from result slices before writing
Example fix
// before
for _, r := range results { w.Write(r) } // r may be nil
// after
for _, r := range results {
if r != nil { w.Write(r) }
} Defensive patterns
Strategy: type-guard
Validate before calling
if res == nil {
return errors.New("cannot write nil result")
}
return w.Write(res) Type guard
func writable(r *ScanResult) bool { return r != nil } Try / catch
if err := w.Write(res); err != nil {
if strings.Contains(err.Error(), "result cannot be nil") {
log.Debug("nil result skipped")
return nil
}
return err
} Prevention
- Guard all Write call sites with nil checks
- Ensure upstream producers never return nil results without an error
- Sanitize result slices (remove nils) before the write phase
When it happens
Trigger: Passing nil directly to Write, forwarding (nil, nil) from an upstream scan function, or iterating a results slice containing nil entries.
Common situations: Aggregation code appending nil placeholders, failed probe stages returning no result and no error, tests like TestTXTWriter_NilResult.
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/9bc9e6497871583f.
Report an issue: GitHub.