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
Affected Products
Ruint