From 9788200234dfe222989823c6160d2be40fd84415 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Tue, 11 Jun 2013 15:50:13 -0400
Subject: [PATCH] Improve NPE handling for hook script enumeration (issue-253)

---
 releases.moxie                                 |    1 +
 src/main/java/com/gitblit/git/ReceiveHook.java |    9 +++++++--
 src/main/java/com/gitblit/GitBlit.java         |    8 ++++++--
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/releases.moxie b/releases.moxie
index d5c04ae..197013a 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -28,6 +28,7 @@
 	 - Ensure Redmine url is properly formatted (issue 223)
 	 - Use standard ServletRequestWrapper instead of custom wrapper (issue 224)
 	 - Switch commit message back to a pre and ensure that it is properly escaped when combined with commit message regex substitution (issue 242)
+	 - Improve NPE handling for hook script enumeration (issue-253)
 
 	changes:
 	 - Improved error logging for servlet containers which provide a null contextFolder (issue 199)
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index df17edd..c538ace 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -3009,7 +3009,9 @@
 		if (repository != null) {
 			for (String teamname : userService.getTeamnamesForRepositoryRole(repository.name)) {
 				TeamModel team = userService.getTeamModel(teamname);
-				scripts.addAll(team.preReceiveScripts);
+				if (!ArrayUtils.isEmpty(team.preReceiveScripts)) {
+					scripts.addAll(team.preReceiveScripts);
+				}
 			}
 		}
 		return new ArrayList<String>(scripts);
@@ -3059,7 +3061,9 @@
 		if (repository != null) {
 			for (String teamname : userService.getTeamnamesForRepositoryRole(repository.name)) {
 				TeamModel team = userService.getTeamModel(teamname);
-				scripts.addAll(team.postReceiveScripts);
+				if (!ArrayUtils.isEmpty(team.postReceiveScripts)) {
+					scripts.addAll(team.postReceiveScripts);
+				}
 			}
 		}
 		return new ArrayList<String>(scripts);
diff --git a/src/main/java/com/gitblit/git/ReceiveHook.java b/src/main/java/com/gitblit/git/ReceiveHook.java
index a961f5a..3e00b38 100644
--- a/src/main/java/com/gitblit/git/ReceiveHook.java
+++ b/src/main/java/com/gitblit/git/ReceiveHook.java
@@ -42,6 +42,7 @@
 import com.gitblit.client.Translation;
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.models.UserModel;
+import com.gitblit.utils.ArrayUtils;
 import com.gitblit.utils.ClientLogger;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.PushLogUtils;
@@ -170,7 +171,9 @@
 
 		Set<String> scripts = new LinkedHashSet<String>();
 		scripts.addAll(GitBlit.self().getPreReceiveScriptsInherited(repository));
-		scripts.addAll(repository.preReceiveScripts);
+		if (!ArrayUtils.isEmpty(repository.preReceiveScripts)) {
+			scripts.addAll(repository.preReceiveScripts);
+		}
 		runGroovy(repository, user, commands, rp, scripts);
 		for (ReceiveCommand cmd : commands) {
 			if (!Result.NOT_ATTEMPTED.equals(cmd.getResult())) {
@@ -262,7 +265,9 @@
 		// run Groovy hook scripts 
 		Set<String> scripts = new LinkedHashSet<String>();
 		scripts.addAll(GitBlit.self().getPostReceiveScriptsInherited(repository));
-		scripts.addAll(repository.postReceiveScripts);
+		if (!ArrayUtils.isEmpty(repository.postReceiveScripts)) {
+			scripts.addAll(repository.postReceiveScripts);
+		}
 		runGroovy(repository, user, commands, rp, scripts);
 	}
 

--
Gitblit v1.9.1