From 0f32a4386a0c63f6846465ca978afb0680e95f7e Mon Sep 17 00:00:00 2001 From: andig Date: Thu, 24 Aug 2023 21:47:46 +0200 Subject: [PATCH] Fix panic when charge status is empty string --- api/api.go | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/api/api.go b/api/api.go index 0f5aa627f..5cd88569f 100644 --- a/api/api.go +++ b/api/api.go @@ -45,22 +45,28 @@ const ( var StatusEasA = map[ChargeStatus]ChargeStatus{StatusE: StatusA} // ChargeStatusString converts a string to ChargeStatus -func ChargeStatusString(s string) (ChargeStatus, error) { - status := strings.ToUpper(strings.TrimSpace(strings.Trim(s, "\x00"))) - switch s1 := status[:1]; s1 { +func ChargeStatusString(status string) (ChargeStatus, error) { + s := strings.ToUpper(strings.Trim(status, "\x00 ")) + + if len(s) == 0 { + return StatusNone, fmt.Errorf("invalid status: %s", status) + } + + switch s1 := s[:1]; s1 { case "A", "B": return ChargeStatus(s1), nil + case "C", "D": - switch status { - case "C1", "D1": + if s == "C1" || s == "D1" { return StatusB, nil - default: - return StatusC, nil } + return StatusC, nil + case "E", "F": - return ChargeStatus(s1), fmt.Errorf("invalid status: %s", status) + return ChargeStatus(s1), fmt.Errorf("invalid status: %s", s) + default: - return StatusNone, fmt.Errorf("invalid status: %s", s) + return StatusNone, fmt.Errorf("invalid status: %s", status) } }