Skip to content

from_str_radix incorrectly parses out-of-range repeating constants... #5770

Closed
@huonw

Description

@huonw

...when the radix is a power of 2. e.g. 100 1's is an invalid u64/i64 in any base, but for powers of 2 it gives a "correct" parse:

static hundred_ones: &'static str  = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";

fn main() {
    for uint::range(2, 37) |i| {
        io::println(
            fmt!("%u %? %?", i,
                 u64::from_str_radix(hundred_ones, i),
                 i64::from_str_radix(hundred_ones, i)));
    }
}

outputs

2 Some(18446744073709551615) None
3 None None
4 Some(6148914691236517205) Some(6148914691236517205)
5 None None
6 None None
7 None None
8 Some(10540996613548315209) None
9 None None
10 None None
11 None None
12 None None
13 None None
14 None None
15 None None
16 Some(1229782938247303441) Some(1229782938247303441)
17 None None
18 None None
19 None None
20 None None
21 None None
22 None None
23 None None
24 None None
25 None None
26 None None
27 None None
28 None None
29 None None
30 None None
31 None None
32 Some(1190112520884487201) Some(1190112520884487201)
33 None None
34 None None
35 None None
36 None None

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions