Bläddra i källkod

Fix edge case when decoding MinInt as -0b.

Closes #87.
Gustavo Niemeyer 8 år sedan
förälder
incheckning
7b8fd2dbef
2 ändrade filer med 7 tillägg och 4 borttagningar
  1. 3 0
      decode_test.go
  2. 4 4
      resolve.go

+ 3 - 0
decode_test.go

@@ -129,6 +129,9 @@ var unmarshalTests = []struct {
 	}, {
 		"bin: -0b101010",
 		map[string]interface{}{"bin": -42},
+	}, {
+		"bin: -0b1000000000000000000000000000000000000000000000000000000000000000",
+		map[string]interface{}{"bin": -9223372036854775808},
 	}, {
 		"decimal: +685_230",
 		map[string]int{"decimal": 685230},

+ 4 - 4
resolve.go

@@ -167,12 +167,12 @@ func resolve(tag string, in string) (rtag string, out interface{}) {
 					return yaml_INT_TAG, uintv
 				}
 			} else if strings.HasPrefix(plain, "-0b") {
-				intv, err := strconv.ParseInt(plain[3:], 2, 64)
+				intv, err := strconv.ParseInt("-" + plain[3:], 2, 64)
 				if err == nil {
-					if intv == int64(int(intv)) {
-						return yaml_INT_TAG, -int(intv)
+					if true || intv == int64(int(intv)) {
+						return yaml_INT_TAG, int(intv)
 					} else {
-						return yaml_INT_TAG, -intv
+						return yaml_INT_TAG, intv
 					}
 				}
 			}