From fcb11ccb346da3d868883884e2831c5e0057b854 Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Tue, 3 Aug 2021 22:08:15 +0200
Subject: [PATCH] fix(kustomize): reject invalid newTag (#11078)

---
 lib/manager/kustomize/__fixtures__/gitImages.yaml   |  2 ++
 .../kustomize/__snapshots__/extract.spec.ts.snap    |  5 +++++
 lib/manager/kustomize/extract.spec.ts               |  4 +++-
 lib/manager/kustomize/extract.ts                    | 13 +++++++++++--
 4 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/lib/manager/kustomize/__fixtures__/gitImages.yaml b/lib/manager/kustomize/__fixtures__/gitImages.yaml
index a7538e20b2..6f49be1ce5 100644
--- a/lib/manager/kustomize/__fixtures__/gitImages.yaml
+++ b/lib/manager/kustomize/__fixtures__/gitImages.yaml
@@ -18,3 +18,5 @@ images:
 - name: this-lives/on-docker-hub
   newName: but.this.lives.on.local/private-registry # and therefore we need to check the versions available here
   newTag: v0.0.4
+- name: nginx
+  newTag: 2.5
diff --git a/lib/manager/kustomize/__snapshots__/extract.spec.ts.snap b/lib/manager/kustomize/__snapshots__/extract.spec.ts.snap
index 572b1f8c06..ec2fc9f816 100644
--- a/lib/manager/kustomize/__snapshots__/extract.spec.ts.snap
+++ b/lib/manager/kustomize/__snapshots__/extract.spec.ts.snap
@@ -124,5 +124,10 @@ Array [
     "replaceString": "v0.0.4",
     "versioning": "docker",
   },
+  Object {
+    "currentValue": 2.5,
+    "depName": "nginx",
+    "skipReason": "invalid-value",
+  },
 ]
 `;
diff --git a/lib/manager/kustomize/extract.spec.ts b/lib/manager/kustomize/extract.spec.ts
index f73775ec6a..f0e15e8959 100644
--- a/lib/manager/kustomize/extract.spec.ts
+++ b/lib/manager/kustomize/extract.spec.ts
@@ -2,6 +2,7 @@ import { getName, loadFixture } from '../../../test/util';
 import * as datasourceDocker from '../../datasource/docker';
 import * as datasourceGitTags from '../../datasource/git-tags';
 import * as datasourceGitHubTags from '../../datasource/github-tags';
+import { SkipReason } from '../../types';
 import * as dockerVersioning from '../../versioning/docker';
 import {
   extractBase,
@@ -230,9 +231,10 @@ describe(getName(), () => {
     it('should extract out image versions', () => {
       const res = extractPackageFile(gitImages);
       expect(res.deps).toMatchSnapshot();
-      expect(res.deps).toHaveLength(5);
+      expect(res.deps).toHaveLength(6);
       expect(res.deps[0].currentValue).toEqual('v0.1.0');
       expect(res.deps[1].currentValue).toEqual('v0.0.1');
+      expect(res.deps[5].skipReason).toEqual(SkipReason.InvalidValue);
     });
     it('ignores non-Kubernetes empty files', () => {
       expect(extractPackageFile('')).toBeNull();
diff --git a/lib/manager/kustomize/extract.ts b/lib/manager/kustomize/extract.ts
index 265716beb5..12bfb8280c 100644
--- a/lib/manager/kustomize/extract.ts
+++ b/lib/manager/kustomize/extract.ts
@@ -1,8 +1,10 @@
+import is from '@sindresorhus/is';
 import { load } from 'js-yaml';
 import * as datasourceDocker from '../../datasource/docker';
 import * as datasourceGitTags from '../../datasource/git-tags';
 import * as datasourceGitHubTags from '../../datasource/github-tags';
 import { logger } from '../../logger';
+import { SkipReason } from '../../types';
 import * as dockerVersioning from '../../versioning/docker';
 import type { PackageDependency, PackageFile } from '../types';
 import type { Image, Kustomize } from './types';
@@ -38,8 +40,15 @@ export function extractBase(base: string): PackageDependency | null {
 export function extractImage(image: Image): PackageDependency | null {
   if (image?.name && image.newTag) {
     const replaceString = image.newTag;
-    let currentValue;
-    let currentDigest;
+    let currentValue: string | undefined;
+    let currentDigest: string | undefined;
+    if (!is.string(replaceString)) {
+      return {
+        depName: image.newName ?? image.name,
+        currentValue: replaceString,
+        skipReason: SkipReason.InvalidValue,
+      };
+    }
     if (replaceString.startsWith('sha256:')) {
       currentDigest = replaceString;
       currentValue = undefined;
-- 
GitLab