From 776d36225bd04c301c0edb4837efb04d83d88e1c Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Thu, 2 Apr 2020 19:34:44 +0200
Subject: [PATCH] fix(cocoapods): add null checks for out of bound lines

Closes #5857, Closes #5858
---
 lib/manager/cocoapods/extract.ts     |  3 +++
 lib/manager/cocoapods/update.spec.ts | 10 ++++++++++
 lib/manager/cocoapods/update.ts      |  8 ++++++++
 3 files changed, 21 insertions(+)

diff --git a/lib/manager/cocoapods/extract.ts b/lib/manager/cocoapods/extract.ts
index 7362adfa33..0ae1eefe06 100644
--- a/lib/manager/cocoapods/extract.ts
+++ b/lib/manager/cocoapods/extract.ts
@@ -27,6 +27,9 @@ export interface ParsedLine {
 
 export function parseLine(line: string): ParsedLine {
   const result: ParsedLine = {};
+  if (!line) {
+    return result;
+  }
   for (const regex of Object.values(regexMappings)) {
     const match = regex.exec(line.replace(/#.*$/, ''));
     if (match && match.groups) {
diff --git a/lib/manager/cocoapods/update.spec.ts b/lib/manager/cocoapods/update.spec.ts
index ee73d947ce..b87aa8b777 100644
--- a/lib/manager/cocoapods/update.spec.ts
+++ b/lib/manager/cocoapods/update.spec.ts
@@ -9,6 +9,16 @@ const fileContent = fs.readFileSync(
 
 describe('lib/manager/cocoapods/update', () => {
   describe('updateDependency', () => {
+    it('handles undefined lines', () => {
+      const upgrade = {
+        depName: 'b',
+        managerData: { lineNumber: 999999999 },
+        currentValue: '1.2.3',
+        newValue: '2.0.0',
+      };
+      const res = updateDependency({ fileContent, upgrade });
+      expect(res).toBeNull();
+    });
     it('replaces existing value', () => {
       const upgrade = {
         depName: 'b',
diff --git a/lib/manager/cocoapods/update.ts b/lib/manager/cocoapods/update.ts
index c3c7a48779..ac8b81ab17 100644
--- a/lib/manager/cocoapods/update.ts
+++ b/lib/manager/cocoapods/update.ts
@@ -24,6 +24,14 @@ export function updateDependency({
   const lines = fileContent.split('\n');
   const lineToChange = lines[managerData.lineNumber];
 
+  if (!lineToChange) {
+    logger.warn(
+      { fileContent, depName, currentValue, newValue },
+      'Undefined cocoapods lineToChange'
+    );
+    return null;
+  }
+
   if (!lineContainsDep(lineToChange, depName)) {
     return null;
   }
-- 
GitLab