diff --git a/src/stdlib/src/lib.rs b/src/stdlib/src/lib.rs index c83bcdd0445b5c0f4c8b4fd3edf3b5607a1dd1d7..d60ffc8a5abdcaf8abe5d019440646fd8265cac7 100644 --- a/src/stdlib/src/lib.rs +++ b/src/stdlib/src/lib.rs @@ -728,8 +728,9 @@ pub fn convert_integer(s: *const c_char, base: c_int) -> Option<(c_ulong, isize, let mut overflowed = false; loop { - // `-1 as usize` is -1 - // `-1 as u8 as usize` is 255 + // `-1 as usize` is usize::MAX + // `-1 as u8 as usize` is u8::MAX + // It extends by the sign bit unless we cast it to unsigned first. let val = unsafe { LOOKUP_TABLE[*s.offset(idx) as u8 as usize] }; if val == -1 || val as c_int >= base { break;