GitHub Advisoryadvisory · crates.io

GHSA-c2hm-mjxv-89r4 Multiple soundness issues in lexical

LOW Published 2023-09-04 Modified 2024-09-16 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`.

References