From df09e2c119f1942dc88bcb89124f88975ee87d39 Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Mon, 28 Jul 2025 22:08:10 +0200 Subject: [PATCH] Also parse floating point numbers if they represent integers. Signed-off-by: Felix Fontein --- stores/flatten.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/stores/flatten.go b/stores/flatten.go index 85ad63bc4..f961d74d0 100644 --- a/stores/flatten.go +++ b/stores/flatten.go @@ -248,7 +248,14 @@ func DecodeNonStrings(m map[string]interface{}) error { case string: vInt, err := strconv.Atoi(val) if err != nil { - return fmt.Errorf("shamir_threshold is not an integer: %s", err.Error()) + // Older versions of SOPS stored shamir_threshold as a floating point representation + // of the actual integer. Try to parse a floating point number and see whether it + // can be converted without loss to an integer. + vFloat, floatErr := strconv.ParseFloat(val, 64) + vInt = int(vFloat) + if floatErr != nil || float64(vInt) != vFloat { + return fmt.Errorf("shamir_threshold is not an integer: %s", err.Error()) + } } m["shamir_threshold"] = vInt case int: