Conversation
Replaced insecure shell interpolation (`shell("/usr/bin/which \(tool)")`) with direct `Foundation.Process` execution in `CacheCategory.swift`. This prevents potential shell command injection vulnerabilities and adheres to defense-in-depth security principles. Output streams are securely redirected to `FileHandle.nullDevice` to avoid unintended log leaks.
Co-authored-by: acebytes <2820910+acebytes@users.noreply.github.com>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: aff860416b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| process.executableURL = URL(fileURLWithPath: "/usr/bin/which") | ||
| process.arguments = [tool] |
There was a problem hiding this comment.
Preserve PATH when checking required tools
Running /usr/bin/which via Process without setting process.environment makes the result depend on the app’s inherited PATH; for macOS GUI launches this is often a minimal path that omits /opt/homebrew/bin and /usr/local/bin. In that case toolExists returns false for installed tools like brew, npm, or docker, and resolvedPaths immediately continues for those .probed(..., requiresTool:) entries, so their fallback cache paths are never scanned.
Useful? React with 👍 / 👎.
💡 What:
Replaced insecure shell interpolation with direct
Foundation.Processexecution intoolExistswithinSources/Cacheout/Models/CacheCategory.swift.🎯 Why:
To prevent potential shell injection vulnerabilities (command injection risks) and follow defense-in-depth security principles. Output is also securely suppressed by assigning
FileHandle.nullDevicetostandardOutputandstandardError.PR created automatically by Jules for task 8252523790882337108 started by @acebytes