From 77f940055418ec21cc772403e7546621d822cb19 Mon Sep 17 00:00:00 2001
From: Christoph Thelen <christoph.thelen@mni.thm.de>
Date: Sat, 14 Mar 2015 12:46:33 +0100
Subject: [PATCH] Fix NPE when locked questions with answers are present

---
 .../de/thm/arsnova/services/QuestionService.java    | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index e90f2b64..4ed5e559 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -31,8 +31,6 @@ import java.util.TimerTask;
 import java.util.Dictionary;
 import java.util.Collections;
 
-import de.thm.arsnova.exceptions.ForbiddenException;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -63,6 +61,7 @@ import de.thm.arsnova.events.NewQuestionEvent;
 import de.thm.arsnova.events.PiRoundDelayedStartEvent;
 import de.thm.arsnova.events.PiRoundEndEvent;
 import de.thm.arsnova.exceptions.BadRequestException;
+import de.thm.arsnova.exceptions.ForbiddenException;
 import de.thm.arsnova.exceptions.NotFoundException;
 import de.thm.arsnova.exceptions.UnauthorizedException;
 
@@ -223,6 +222,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		this.publisher.publishEvent(event);
 	}
 
+	@Override
 	public void startNewPiRound(final String questionId, User user) {
 		if(null == user) {
 			user = userService.getCurrentUser();
@@ -254,6 +254,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		cancelDelayedPiRoundChange(questionId);
 
 		timer.schedule(new TimerTask() {
+			@Override
 			public void run() {
 				questionService.startNewPiRound(questionId, user);
 			}
@@ -268,6 +269,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		this.publisher.publishEvent(new PiRoundDelayedStartEvent(this, session, question));
 	}
 
+	@Override
 	public void cancelDelayedPiRoundChange(final String questionId) {
 		Timer timer = timerList.get(questionId);
 
@@ -428,6 +430,11 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		final List<Answer> filteredAnswers = new ArrayList<Answer>();
 		for (final Answer answer : answers) {
 			final Question question = questionIdToQuestion.get(answer.getQuestionId());
+			if (question == null) {
+				// Question is not present. Most likely it has been locked by the
+				// Session's creator. Locked Questions do not appear in this list.
+				continue;
+			}
 			if (0 == answer.getPiRound() && !"freetext".equals(question.getQuestionType())) {
 				answer.setPiRound(1);
 			}
@@ -516,7 +523,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		final User user = userService.getCurrentUser();
 		return update(question, user);
 	}
-	
+
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public Question update(final Question question, User user) {
-- 
GitLab