PT-2026-66662 · Crates.Io · Ruint

Published

2026-07-08

·

Updated

2026-07-08

None

No severity ratings or metrics are available. When they are, we'll update the corresponding info on the page.
Uint::overflowing shl/overflowing shr returned false-negative overflow flags. overflowing shl missed bits shifted above BITS but within the top limb (non-limb-aligned widths such as U160), and limbs wholly discarded by shifts >= 64; overflowing shr missed wholly discarded low limbs. Shifted values were correct; only the flag was wrong.
The wrong flag propagates: checked shl/checked shr return Some instead of None, strict * fail to panic, and saturating * return a wrapped value instead of saturating. The incorrect checked shl result causes to base be (and string formatting) to loop forever on no-alloc builds for non-limb-aligned widths — a denial of service if formatting is reachable from untrusted input.
Separately, wrapping shl/wrapping shr on 64/128/256-bit types truncated the shift amount modulo 2^32, so shifts >= 2^32 returned an incorrectly wrapped value instead of zero; on 32-bit targets the generic path also truncated 64-bit shift amounts.
Callers using checked or saturating shift semantics on untrusted shift amounts may compute incorrect results.
Found an issue in the description? Have something to add? Feel free to write us 👾

Related Identifiers

RUSTSEC-2026-0220

Affected Products

Ruint