Skip to content

Avoid shell execution in ReadFileTool ranged reads #5267

@petrmarinec

Description

@petrmarinec

Summary

ReadFileTool currently has two code paths:

  • full reads use environment.read_file(path) and slice/number lines in Python
  • ranged reads build and execute cat -n '{path}' | sed -n ...

That ranged-read branch shells out on caller-controlled path instead of reusing the normal file-read path.

Problem

Because path is interpolated into a shell command, filenames containing shell metacharacters are interpreted by the shell rather than treated as literal file paths. This also makes ranged reads behave differently from the default ReadFileTool path and introduces an unnecessary shell dependency into a read-oriented tool.

Expected behavior

ReadFileTool should read files through environment.read_file(...) for both full reads and ranged reads, and apply line slicing/numbering in Python.

Proposed fix

Remove the shell-based ranged-read branch and reuse the existing Python file-read logic for all reads.

Validation

I have a PR prepared that:

  • removes the shell-based ranged-read path
  • adds regression tests showing ranged reads no longer invoke execute()
  • confirms in Linux that a path payload that previously executed a proof command is now treated as a literal filename and does not write a proof file
  • passes pytest tests/unittests/tools

Metadata

Metadata

Assignees

Labels

tools[Component] This issue is related to tools

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions