authorgravatar for kaihlavirta@gmail.comMikko Kaihlavirta <kaihlavirta@gmail.com> 2023-06-24 13:06:56+03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-06-24 13:02:45-07:00
logfa6cea22bf9cd5ff6a9dd882166cf7e479acfd6c
tree7a9c35d8c3b6e20dd148f7937627e04071422d0f
parentea1d64dae4bb34d62e9cfddf7e3da493ed8063e9

fix parseInt failing when a correct base is given


1 files changed, 25 insertions(+), 20 deletions(-)

lib/std/fmt.zig+25-20
......@@ -1753,6 +1753,14 @@ test "parseInt" {
17531753 try std.testing.expect((try parseInt(u8, "255", 10)) == 255);
17541754 try std.testing.expectError(error.Overflow, parseInt(u8, "256", 10));
17551755
1756 // Test different bases
1757 try std.testing.expect((try parseInt(i32, "0b10", 2)) == 0b10);
1758 try std.testing.expect((try parseInt(i32, "0o10", 8)) == 0o10);
1759 try std.testing.expect((try parseInt(i32, "0x10", 16)) == 0x10);
1760 try std.testing.expect((try parseInt(i32, "10", 2)) == 0b10);
1761 try std.testing.expect((try parseInt(i32, "10", 8)) == 0o10);
1762 try std.testing.expect((try parseInt(i32, "10", 16)) == 0x10);
1763
17561764 // +0 and -0 should work for unsigned
17571765 try std.testing.expect((try parseInt(u8, "-0", 10)) == 0);
17581766 try std.testing.expect((try parseInt(u8, "+0", 10)) == 0);
......@@ -1804,28 +1812,25 @@ fn parseWithSign(
18041812
18051813 var buf_base = base;
18061814 var buf_start = buf;
1807 if (base == 0) {
1808 // Treat is as a decimal number by default.
1809 buf_base = 10;
1810 // Detect the base by looking at buf prefix.
1811 if (buf.len > 2 and buf[0] == '0') {
1812 switch (std.ascii.toLower(buf[1])) {
1813 'b' => {
1814 buf_base = 2;
1815 buf_start = buf[2..];
1816 },
1817 'o' => {
1818 buf_base = 8;
1819 buf_start = buf[2..];
1820 },
1821 'x' => {
1822 buf_base = 16;
1823 buf_start = buf[2..];
1824 },
1825 else => {},
1826 }
1815
1816 if (buf.len > 2 and buf[0] == '0') {
1817 switch (std.ascii.toLower(buf[1])) {
1818 'b' => {
1819 if (base == 0) buf_base = 2;
1820 buf_start = buf[2..];
1821 },
1822 'o' => {
1823 if (base == 0) buf_base = 8;
1824 buf_start = buf[2..];
1825 },
1826 'x' => {
1827 if (base == 0) buf_base = 16;
1828 buf_start = buf[2..];
1829 },
1830 else => {},
18271831 }
18281832 }
1833 if (buf_base == 0) buf_base = 10;
18291834
18301835 const add = switch (sign) {
18311836 .pos => math.add,