Subject
inquire 0.7.5 is an interactive terminal prompt library for Rust CLI applications. It exposes eight prompt types: Text (free-form input with optional autocompletion), Password (masked input with optional confirmation), Confirm (yes/no), Select and MultiSelect (option lists), CustomType (text input parsed to an arbitrary type), DateSelect (calendar picker, date feature), and Editor (long-form input via an external editor, editor feature). Three interchangeable terminal backends are available: crossterm (default, cross-platform), termion (Unix), and console.
Methodology
The published crate contents were compared against the upstream Git repository at the commit recorded in .cargo_vcs_info.json using diff -rq. All source files in contents/src/ (approximately 14,500 LOC across 60 files) were read in full. Initial surveys were run with grep to locate unsafe blocks, FFI declarations, network calls, filesystem calls, process invocations, environment variable reads, concurrency primitives, and cryptographic operations. The VCS checkout was present and complete.
Results
The diff between published contents and VCS shows only the expected cargo-normalised Cargo.toml divergence; all source files match byte-for-byte. No binary artifacts are present (has-binaries=false). There is no build.rs and no proc-macro declaration, so no build-time code executes (has-build-exec=false, has-install-exec=false).
No unsafe blocks, FFI declarations, or raw-pointer operations appear anywhere in the source (uses-unsafe=false). No network operations are present (uses-network=false). No cryptographic libraries are imported or invoked (uses-crypto=false, impl-crypto=false). The crate uses no JIT compiler and embeds no interpreter (uses-jit=false, uses-interpreter=false, impl-jit=false, impl-interpreter=false). The crate does not implement its own parser, protocol, data structure, algorithm, or concurrency primitives (impl-parser=false, impl-protocol=false, impl-datastructure=false, impl-algorithm=false, impl-concurrency=false).
The Editor prompt spawns an external process via process::Command::new with an argv array (never via a shell), justifying uses-exec=true and exec-safe=true. The editor command is resolved from the EDITOR/VISUAL environment variables or defaults to nano/notepad; the NO_COLOR environment variable is read for color output configuration. These are conventional, documented variables; the environment is not enumerated or exfiltrated, justifying uses-environment=true and environment-safe=true. The Editor prompt creates a NamedTempFile via the tempfile crate with a random name; filesystem access is limited to this controlled path, justifying uses-filesystem=true and filesystem-safe=true.
A global Mutex<RenderConfig<'static>> is guarded by once_cell::sync::Lazy; access is through two documented public functions. No other shared mutable state was found. Justifies uses-concurrency=true, concurrency-safe=true, and concurrency-documented=true.
The codebase contains 119 unit tests across the prompt modules (covering input handling, confirm, select, multiselect, date, password, and text prompt logic) but no integration tests, fuzz tests, or property tests, justifying has-unit-tests=true, has-integration-tests=false, has-fuzz-tests=false, and has-property-tests=false.
One medium-severity security finding (FINDING-1) was identified: the Password prompt accumulates typed characters in a String via the Input type, and clears them with String::clear() when clearing on validation failure or confirmation mismatch, and returns the final password value as a plain String. Neither Input nor the returned String is zeroed on drop. No zeroize dependency is present. Password bytes can persist in heap memory until the allocator overwrites the region, making them potentially recoverable from core dumps or through memory forensics. This is a commonly expected property for password-entry libraries that is absent here.
No malicious, obfuscated, or suspicious code was found; is-benign=true.
Conclusion
The codebase is written entirely in safe Rust with no unsafe blocks, no FFI, no network I/O, and no cryptographic operations. The one notable concern is the absence of memory zeroization for password input, documented in FINDING-1. All other prompt types behave as documented. The 119 unit tests provide reasonable coverage of the input handling and prompt logic, but there are no fuzz tests or property tests.