|
|
@@ -3,6 +3,7 @@ package yaml
|
|
|
import (
|
|
|
"encoding/base64"
|
|
|
"math"
|
|
|
+ "regexp"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"unicode/utf8"
|
|
|
@@ -80,6 +81,8 @@ func resolvableTag(tag string) bool {
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
+var yamlStyleFloat = regexp.MustCompile(`^[-+]?[0-9]*\.?[0-9]+([eE][-+][0-9]+)?$`)
|
|
|
+
|
|
|
func resolve(tag string, in string) (rtag string, out interface{}) {
|
|
|
if !resolvableTag(tag) {
|
|
|
return tag, in
|
|
|
@@ -135,9 +138,11 @@ func resolve(tag string, in string) (rtag string, out interface{}) {
|
|
|
if err == nil {
|
|
|
return yaml_INT_TAG, uintv
|
|
|
}
|
|
|
- floatv, err := strconv.ParseFloat(plain, 64)
|
|
|
- if err == nil {
|
|
|
- return yaml_FLOAT_TAG, floatv
|
|
|
+ if yamlStyleFloat.MatchString(plain) {
|
|
|
+ floatv, err := strconv.ParseFloat(plain, 64)
|
|
|
+ if err == nil {
|
|
|
+ return yaml_FLOAT_TAG, floatv
|
|
|
+ }
|
|
|
}
|
|
|
if strings.HasPrefix(plain, "0b") {
|
|
|
intv, err := strconv.ParseInt(plain[2:], 2, 64)
|