fix: improve io.ReadFull error handling for partial reads
Update pkg/tools/filesystem.go to treat io.ErrUnexpectedEOF and io.EOF as normal terminal conditions during partial reads, ensuring robust detection of further content. Also modernized error checks using errors.Is. Co-authored-by: hobbyistlabs-coder <267281733+hobbyistlabs-coder@users.noreply.github.com>
This commit is contained in:
parent
67083d4073
commit
29f5df5e8a
1 changed files with 3 additions and 2 deletions
|
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue