Project
vgrep
Description
The search function's path canonicalization uses unwrap_or_else(|_| path.to_path_buf()) which silently falls back to the original path when canonicalization fails. Canonicalization can fail for:
- Non-existent paths
- Permission errors
- Symlink loops
- Paths with invalid characters
This silent fallback means malicious or malformed paths are used as-is without any validation.
Error Message
Debug Logs
System Information
Bounty Version: 0.1.0
OS: Ubuntu 24.04 LTS
CPU: AMD EPYC-Genoa Processor (8 cores)
RAM: 15 GB
Screenshots
No response
Steps to Reproduce
- Create a broken symlink:
ln -s /nonexistent/path broken_link
- Search with the broken symlink as path:
curl -X POST http://127.0.0.1:7777/search \
-H 'Content-Type: application/json' \
-d '{"query":"test","path":"broken_link"}'
- Observe that path is silently used without canonicalization
Expected Behavior
- Failed canonicalization should return an error
- User should be notified that path is invalid
- Search should not proceed with unvalidated path
Actual Behavior
- Canonicalization failure caught silently
- Original (potentially malicious) path used as-is
- No indication to user that path wasn't validated
Additional Context
Location: src/core/search.rs:43
let abs_path = std::fs::canonicalize(path).unwrap_or_else(|_| path.to_path_buf());
Project
vgrep
Description
The search function's path canonicalization uses
unwrap_or_else(|_| path.to_path_buf())which silently falls back to the original path when canonicalization fails. Canonicalization can fail for:This silent fallback means malicious or malformed paths are used as-is without any validation.
Error Message
Debug Logs
System Information
Screenshots
No response
Steps to Reproduce
ln -s /nonexistent/path broken_linkExpected Behavior
Actual Behavior
Additional Context
Location:
src/core/search.rs:43