From 112d6e722c3c517dd17e3ffecbe5177949b46fbb Mon Sep 17 00:00:00 2001 From: Gustavo Niemeyer Date: Fri, 15 Mar 2019 15:00:35 +0000 Subject: [PATCH] Parse floats correctly and fix mistake from #171 The regular expression is copy & pasted form the one in the spec. The change suggested in #171 and integrated was improper. Closes #290. --- decode_test.go | 6 +++--- resolve.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/decode_test.go b/decode_test.go index 2957a925..888c2b9e 100644 --- a/decode_test.go +++ b/decode_test.go @@ -670,13 +670,13 @@ var unmarshalTests = []struct { M{"ñoño": "very yes 🟔"}, }, - // YAML Float regex shouldn't match this + // This *is* in fact a float number, per the spec. #171 was a mistake. { "a: 123456e1\n", - M{"a": "123456e1"}, + M{"a": 123456e1}, }, { "a: 123456E1\n", - M{"a": "123456E1"}, + M{"a": 123456E1}, }, // yaml-test-suite 3GZX: Spec Example 7.1. Alias Nodes { diff --git a/resolve.go b/resolve.go index 613b3467..983da066 100644 --- a/resolve.go +++ b/resolve.go @@ -77,7 +77,7 @@ func resolvableTag(tag string) bool { return false } -var yamlStyleFloat = regexp.MustCompile(`^[-+]?[0-9]*\.?[0-9]+([eE][-+][0-9]+)?$`) +var yamlStyleFloat = regexp.MustCompile(`^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$`) func resolve(tag string, in string) (rtag string, out interface{}) { if !resolvableTag(tag) {