GitHub Advisoryadvisory · crates.io
GHSA-c2hm-mjxv-89r4 Multiple soundness issues in lexical
LOW
Official page ↗
- Ecosystem
- crates.io
- Packages
- lexical
- Severity
- Low
- Reviewed
- 2023-09-04
Affected packages
• crates.io lexical: < 7.0.0 → fixed in 7.0.0
Description
`lexical` contains multiple soundness issues:
1. Bytes::read() allows creating instances of types with invalid bit patterns
1. BytesIter::read() advances iterators out of bounds
1. The `BytesIter` trait has safety invariants but is public and not marked `unsafe`
1. `write_float()` calls `MaybeUninit::assume_init()` on uninitialized data, which is is not allowed by the Rust abstract machine
1. `radix()` calls `MaybeUninit::assume_init()` on uninitialized data, which is is not allowed by the Rust abstract machine
The crate also has some correctness issues.
Alternatives
For quickly parsing floating-point numbers third-party crates are no longer needed. A fast float parsing algorithm by the author of `lexical` has been merged into libcore.
For quickly parsing integers, consider `atoi` and `btoi` crates (100% safe code). `atoi_radix10` provides even faster parsing, but only with `-C target-cpu=native`, and at the cost of some `unsafe`.
For formatting integers in a `#[no_std]` context consider the `numtoa` crate.
For working with big numbers consider `num-bigint` and `num-traits`.