From 4ea5c581ad1383eac327acc0cae4e3fbb5ecd736 Mon Sep 17 00:00:00 2001 From: Steven Clark Date: Tue, 21 Feb 2023 08:52:19 -0500 Subject: [PATCH] pki health-check fails to read in int config values (#19265) * pki health-check fails to read in int config values - Go's default behavior when decoding numbers to an interface{} is to use a float64 type which parseutil.SafeParseIntRange does not handle. - Switch to having the JSON decoder use json.Number which our parseutil library properly handles. * Add cl --- changelog/19265.txt | 3 +++ command/pki_health_check.go | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 changelog/19265.txt diff --git a/changelog/19265.txt b/changelog/19265.txt new file mode 100644 index 000000000000..23d957e2d594 --- /dev/null +++ b/changelog/19265.txt @@ -0,0 +1,3 @@ +```release-note:bug +cli/pki: Decode integer values properly in health-check configuration file +``` diff --git a/command/pki_health_check.go b/command/pki_health_check.go index d2bc87e97f52..1551dd1c110d 100644 --- a/command/pki_health_check.go +++ b/command/pki_health_check.go @@ -243,13 +243,16 @@ func (c *PKIHealthCheckCommand) Run(args []string) int { // Handle config merging. external_config := map[string]interface{}{} if c.flagConfig != "" { - contents, err := os.ReadFile(c.flagConfig) + contents, err := os.Open(c.flagConfig) if err != nil { c.UI.Error(fmt.Sprintf("Failed to read configuration file %v: %v", c.flagConfig, err)) return pkiRetUsage } - if err := json.Unmarshal(contents, &external_config); err != nil { + decoder := json.NewDecoder(contents) + decoder.UseNumber() // Use json.Number instead of float64 values as we are decoding to an interface{}. + + if err := decoder.Decode(&external_config); err != nil { c.UI.Error(fmt.Sprintf("Failed to parse configuration file %v: %v", c.flagConfig, err)) return pkiRetUsage }