diff --git a/pkg/controller/utils/utils.go b/pkg/controller/utils/utils.go index cfd507117..49f97f7a9 100644 --- a/pkg/controller/utils/utils.go +++ b/pkg/controller/utils/utils.go @@ -17,6 +17,7 @@ limitations under the License. package utils import ( + "errors" "fmt" "strconv" "strings" @@ -53,6 +54,14 @@ var ExtractComponentName = util.ExtractComponentName // ExtractRevision will extract the revision from a revisionName func ExtractRevision(revisionName string) (int, error) { splits := strings.Split(revisionName, "-") + // check some bad revision name, eg: 5 + if len(splits) == 1 { + return 0, errors.New(util.ErrBadRevision) + } + // check some bad revision name, eg: myapp-a1 + if !strings.HasPrefix(splits[len(splits)-1], "v") { + return 0, errors.New(util.ErrBadRevision) + } // the revision is the last string without the prefix "v" return strconv.Atoi(strings.TrimPrefix(splits[len(splits)-1], "v")) } diff --git a/pkg/controller/utils/utils_test.go b/pkg/controller/utils/utils_test.go index 10e077847..fd05fa69d 100644 --- a/pkg/controller/utils/utils_test.go +++ b/pkg/controller/utils/utils_test.go @@ -42,7 +42,7 @@ func TestConstructExtract(t *testing.T) { } }) } - badRevision := []string{"xx", "yy-", "zz-0.1"} + badRevision := []string{"xx", "yy-", "zz-0.1", "5", "myapp-a1"} t.Run(fmt.Sprintf("tests %s for extractRevision", badRevision), func(t *testing.T) { for _, revisionName := range badRevision { _, err := ExtractRevision(revisionName)