From 9c3e336e22e57a55223bbc21e69aa51b321f575c Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 13 Dec 2020 12:11:43 +0100
Subject: [PATCH] fix(docker): better checking for null dep strings

---
 lib/manager/docker-compose/extract.ts                     | 3 ++-
 lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap | 6 ++++++
 lib/manager/dockerfile/extract.spec.ts                    | 7 ++++++-
 lib/manager/dockerfile/extract.ts                         | 6 ++++++
 4 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/lib/manager/docker-compose/extract.ts b/lib/manager/docker-compose/extract.ts
index 88adf9f278..4bcf0a7913 100644
--- a/lib/manager/docker-compose/extract.ts
+++ b/lib/manager/docker-compose/extract.ts
@@ -1,3 +1,4 @@
+import is from '@sindresorhus/is';
 import { safeLoad } from 'js-yaml';
 
 import { logger } from '../../logger';
@@ -78,7 +79,7 @@ export function extractPackageFile(
     // Image name/tags for services are only eligible for update if they don't
     // use variables and if the image is not built locally
     const deps = Object.values(services || {})
-      .filter((service) => service?.image && !service?.build)
+      .filter((service) => is.string(service?.image) && !service?.build)
       .map((service) => {
         const dep = getDep(service.image);
         const lineNumber = lineMapper.pluckLineNumber(service.image);
diff --git a/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap b/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap
index 8fa40c4641..19960ee8cc 100644
--- a/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap
+++ b/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap
@@ -378,3 +378,9 @@ Array [
   },
 ]
 `;
+
+exports[`lib/manager/dockerfile/extract getDep() rejects null 1`] = `
+Object {
+  "skipReason": "invalid-value",
+}
+`;
diff --git a/lib/manager/dockerfile/extract.spec.ts b/lib/manager/dockerfile/extract.spec.ts
index 864c53b1d3..93d0af0dac 100644
--- a/lib/manager/dockerfile/extract.spec.ts
+++ b/lib/manager/dockerfile/extract.spec.ts
@@ -1,5 +1,5 @@
 import { readFileSync } from 'fs';
-import { extractPackageFile } from './extract';
+import { extractPackageFile, getDep } from './extract';
 
 const d1 = readFileSync(
   'lib/manager/dockerfile/__fixtures__/Dockerfile1',
@@ -151,4 +151,9 @@ describe('lib/manager/dockerfile/extract', () => {
       expect(res).toMatchSnapshot();
     });
   });
+  describe('getDep()', () => {
+    it('rejects null', () => {
+      expect(getDep(null)).toMatchSnapshot();
+    });
+  });
 });
diff --git a/lib/manager/dockerfile/extract.ts b/lib/manager/dockerfile/extract.ts
index 2c9b697637..aaba509722 100644
--- a/lib/manager/dockerfile/extract.ts
+++ b/lib/manager/dockerfile/extract.ts
@@ -1,3 +1,4 @@
+import is from '@sindresorhus/is';
 import * as datasourceDocker from '../../datasource/docker';
 import { logger } from '../../logger';
 import { SkipReason } from '../../types';
@@ -35,6 +36,11 @@ export function getDep(
   currentFrom: string,
   specifyReplaceString = true
 ): PackageDependency {
+  if (!is.string(currentFrom)) {
+    return {
+      skipReason: SkipReason.InvalidValue,
+    };
+  }
   const dep = splitImageParts(currentFrom);
   if (specifyReplaceString) {
     dep.replaceString = currentFrom;
-- 
GitLab