Repository navigation
v0.3.1
Security and data-safety fixes for 0.3.0. Upgrade from 0.3.0; 0.3.0 is yanked on crates.io and deprecated on npm.
Security
- Path traversal via ticker symbols. A ticker such as
../../xwas used directly in cache file names, so idx could read or delete.jsonfiles outside its cache directory. Throughidx-mcp, a single tool call from a prompt-injected agent was enough. Tickers are now validated (invalid ticker symbol, exit 2) and cache file names are encoded.
Ownership database
- A cross-process lock (
<db>.lock) now guards the ownership database: sync installs, imports and entity edits take it exclusively, reads take it shared. Before, a sync could replace the database under an active import or reader and lose data. - Sync downloads without holding the lock, and downloads now time out (15 s connect, 10 min total) instead of hanging.
- A symlinked
ownership.db_pathkeeps its symlink: sync updates the real file and shares its lock. - A rebuilt snapshot never replaces a local database that holds more releases than it does.
MCP
- Input limits: at most 20 symbols per call (duplicates collapsed), caps on
limit, at most 4 concurrent tool calls. The tool schemas state the limits.
Robustness
- Atomic cache writes; per-client Yahoo cookie files.
- Size caps on ZIP entries and XLSX workbooks; two parser inputs that could crash or overflow now return errors.
Other
- Minimum supported Rust version is now 1.89 (for std file locks).
tests/agents/agent-smoke.sh: opt-in smoke test that drives real coding agents (Claude Code, Codex, pi, Hermes, opencode) against idx-mcp.