authorgravatar for cryptocode@zolo.iocryptocode <cryptocode@zolo.io> 2021-03-04 18:42:56+01:00
committergravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2021-03-05 13:11:20+01:00
log02737d535ac5bda4e9a00ec0ae11ae313065dfbb
treee9af1999fd94f99a78f500e26ae9dac284466eb2
parent434fce2146a9f1dc096fdae6827e0855799351ca

Reject bare +/- input when parsing floats


1 files changed, 3 insertions(+), 1 deletions(-)

lib/std/fmt/parse_float.zig+3-1
...@@ -339,7 +339,7 @@ fn caseInEql(a: []const u8, b: []const u8) bool {...@@ -339,7 +339,7 @@ fn caseInEql(a: []const u8, b: []const u8) bool {
339}339}
340340
341pub fn parseFloat(comptime T: type, s: []const u8) !T {341pub fn parseFloat(comptime T: type, s: []const u8) !T {
342 if (s.len == 0) {342 if (s.len == 0 or (s.len == 1 and (s[0] == '+' or s[0] == '-'))) {
343 return error.InvalidCharacter;343 return error.InvalidCharacter;
344 }344 }
345345
...@@ -379,6 +379,8 @@ test "fmt.parseFloat" {...@@ -379,6 +379,8 @@ test "fmt.parseFloat" {
379 testing.expectError(error.InvalidCharacter, parseFloat(T, ""));379 testing.expectError(error.InvalidCharacter, parseFloat(T, ""));
380 testing.expectError(error.InvalidCharacter, parseFloat(T, " 1"));380 testing.expectError(error.InvalidCharacter, parseFloat(T, " 1"));
381 testing.expectError(error.InvalidCharacter, parseFloat(T, "1abc"));381 testing.expectError(error.InvalidCharacter, parseFloat(T, "1abc"));
382 testing.expectError(error.InvalidCharacter, parseFloat(T, "+"));
383 testing.expectError(error.InvalidCharacter, parseFloat(T, "-"));
382384
383 expectEqual(try parseFloat(T, "0"), 0.0);385 expectEqual(try parseFloat(T, "0"), 0.0);
384 expectEqual(try parseFloat(T, "0"), 0.0);386 expectEqual(try parseFloat(T, "0"), 0.0);