Skip to content

v0.3.1

Choose a tag to compare

@0xrsydn 0xrsydn released this 15 Oct 03:15
· 101 commits to main since this release

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 ../../x was used directly in cache file names, so idx could read or delete .json files outside its cache directory. Through idx-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_path keeps 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.