Merge pull request #19 from hobbyistlabs-coder/fix-readfull-error-handling-11357871747362898216

🧹 Fix io.ReadFull error handling for partial reads
This commit is contained in:
hobbyistlabs-coder 2026-03-13 17:29:44 -04:00 committed by GitHub
commit f77867d8e9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -234,10 +234,11 @@ func (t *ReadFileTool) Execute(ctx context.Context, args map[string]any) *ToolRe
// This avoids the false-positive TRUNCATED message on the last page. // This avoids the false-positive TRUNCATED message on the last page.
probe := make([]byte, length+1) probe := make([]byte, length+1)
n, err := io.ReadFull(file, probe) n, err := io.ReadFull(file, probe)
// FIX: io.ReadFull returns io.ErrUnexpectedEOF for partial reads (0 < n < len),
// io.ReadFull returns io.ErrUnexpectedEOF for partial reads (0 < n < len),
// and io.EOF only when n == 0. Both are normal terminal conditions — only // and io.EOF only when n == 0. Both are normal terminal conditions — only
// other errors are genuine failures. // other errors are genuine failures.
if err != nil && err != io.EOF && !errors.Is(err, io.ErrUnexpectedEOF) { if err != nil && !errors.Is(err, io.EOF) && !errors.Is(err, io.ErrUnexpectedEOF) {
return ErrorResult(fmt.Sprintf("failed to read file content: %v", err)) return ErrorResult(fmt.Sprintf("failed to read file content: %v", err))
} }