Blob Blame History Raw
From 6904e747053de913a18191252a4d010787c2fa8f Mon Sep 17 00:00:00 2001
From: Thomas Wolf <a@a.com>
Date: Mon, 24 Jun 2019 08:13:05 +0200
Subject: [PATCH] Avoid NPE in FetchGerritChangePage

When getting the change refs from the Gerrit server fails the change
list may be null. Therefore add null checks where needed.

Bug: 548534
Change-Id: Ifc4d42f42ab016897430eb71c8831cfd979d47c4
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>---
 .../egit/ui/internal/fetch/FetchGerritChangePage.java       | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
---
 .../ui/internal/fetch/FetchGerritChangePage.java    | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchGerritChangePage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchGerritChangePage.java
index c3dee00..5ff9299 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchGerritChangePage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchGerritChangePage.java
@@ -766,14 +766,15 @@ private void checkPage() {
 				ChangeList list = changeRefs.get(uriCombo.getText());
 				if (list != null && list.isDone()) {
 					try {
+						Collection<Change> changes = list.get();
 						if (change.getPatchSetNumber() != null) {
-							if (!list.get().contains(change)) {
+							if (changes == null || !changes.contains(change)) {
 								setErrorMessage(
 										UIText.FetchGerritChangePage_UnknownChangeRefMessage);
 								return;
 							}
 						} else {
-							Change fromGerrit = findHighestPatchSet(list.get(),
+							Change fromGerrit = findHighestPatchSet(changes,
 									change.getChangeNumber().intValue());
 							if (fromGerrit == null) {
 								setErrorMessage(NLS.bind(
@@ -908,6 +909,9 @@ private void fillInPatchSet(Collection<Change> changes) {
 
 	private Change findHighestPatchSet(Collection<Change> changes,
 			int changeNumber) {
+		if (changes == null) {
+			return null;
+		}
 		// We know that the result is sorted by change and
 		// patch set number descending
 		for (Change fromGerrit : changes) {
@@ -1055,8 +1059,11 @@ private Change completeChange(Change originalChange,
 					if (monitor.isCanceled()) {
 						throw new OperationCanceledException();
 					}
-					return findHighestPatchSet(changes,
+					Change highest = findHighestPatchSet(changes,
 							originalChange.getChangeNumber().intValue());
+					if (highest != null) {
+						return highest;
+					}
 				}
 				return originalChange;
 			}
-- 
2.20.1