From 01dbf9dcb3c4b1b71ad41a5ed18de6a0545df2da Mon Sep 17 00:00:00 2001 From: Dmitry Volodin Date: Wed, 22 Apr 2020 22:08:49 +0300 Subject: [PATCH] :bug: Fix controllerutil.RemoveFinalizer for slice bounds out of range exception --- pkg/controller/controllerutil/controllerutil.go | 5 +++-- pkg/controller/controllerutil/controllerutil_test.go | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/controller/controllerutil/controllerutil.go b/pkg/controller/controllerutil/controllerutil.go index 767f80deb3..27ce71d03d 100644 --- a/pkg/controller/controllerutil/controllerutil.go +++ b/pkg/controller/controllerutil/controllerutil.go @@ -262,9 +262,10 @@ func AddFinalizerWithError(o runtime.Object, finalizer string) error { // RemoveFinalizer accepts a metav1 object and removes the provided finalizer if present. func RemoveFinalizer(o metav1.Object, finalizer string) { f := o.GetFinalizers() - for i, e := range f { - if e == finalizer { + for i := 0; i < len(f); i++ { + if f[i] == finalizer { f = append(f[:i], f[i+1:]...) + i-- } } o.SetFinalizers(f) diff --git a/pkg/controller/controllerutil/controllerutil_test.go b/pkg/controller/controllerutil/controllerutil_test.go index 5bcbc192ef..74b736c7bb 100644 --- a/pkg/controller/controllerutil/controllerutil_test.go +++ b/pkg/controller/controllerutil/controllerutil_test.go @@ -445,6 +445,12 @@ var _ = Describe("Controllerutil", func() { controllerutil.RemoveFinalizer(deploy, testFinalizer) Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{})) }) + + It("should remove all equal finalizers if present", func() { + deploy.SetFinalizers(append(deploy.Finalizers, testFinalizer, testFinalizer)) + controllerutil.RemoveFinalizer(deploy, testFinalizer) + Expect(deploy.ObjectMeta.GetFinalizers()).To(Equal([]string{})) + }) }) }) })