From d351343964ff75a9d8bc4c0651b7df4ddac40287 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 11 Jan 2012 16:18:25 -0500
Subject: [PATCH] Fixed some null pointer bugs in the pages servlet

---
 src/com/gitblit/PagesServlet.java |   44 ++++++++++++++++++++++++++++++++------------
 1 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/src/com/gitblit/PagesServlet.java b/src/com/gitblit/PagesServlet.java
index 58d67b0..d6304f7 100644
--- a/src/com/gitblit/PagesServlet.java
+++ b/src/com/gitblit/PagesServlet.java
@@ -159,27 +159,47 @@
 				}
 			} else {
 				// specific resource
-				String contentType = context.getMimeType(resource);
-				if (contentType.startsWith("text")) {
-					content = JGitUtils.getStringContent(r, tree, resource).getBytes(
-							Constants.ENCODING);
-				} else {
-					content = JGitUtils.getByteContent(r, tree, resource);
+				try {
+					String contentType = context.getMimeType(resource);
+					if (contentType == null) {
+						contentType = "text/plain";
+					}
+					if (contentType.startsWith("text")) {
+						content = JGitUtils.getStringContent(r, tree, resource).getBytes(
+								Constants.ENCODING);
+					} else {
+						content = JGitUtils.getByteContent(r, tree, resource);
+					}
+					response.setContentType(contentType);
+				} catch (Exception e) {
 				}
-				response.setContentType(contentType);
 			}
 
 			// no content, try custom 404 page
 			if (ArrayUtils.isEmpty(content)) {
-				content = JGitUtils.getStringContent(r, tree, "404.html").getBytes(
-						Constants.ENCODING);
+				String custom404 = JGitUtils.getStringContent(r, tree, "404.html");
+				if (!StringUtils.isEmpty(custom404)) {
+					content = custom404.getBytes(Constants.ENCODING);
+				}
+
 				// still no content
 				if (ArrayUtils.isEmpty(content)) {
-					content = (MessageFormat.format(
+					String str = MessageFormat.format(
 							"# Error\nSorry, the requested resource **{0}** was not found.",
-							resource)).getBytes(Constants.ENCODING);
-					resource = "404.mkd";
+							resource);
+					content = MarkdownUtils.transformMarkdown(str).getBytes(Constants.ENCODING);
 				}
+
+				try {
+					// output the content
+					logger.warn("Pages 404: " + resource);
+					response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+					response.getOutputStream().write(content);
+					response.flushBuffer();
+				} catch (Throwable t) {
+					logger.error("Failed to write page to client", t);
+				}
+				return;
 			}
 
 			// check to see if we should transform markdown files

--
Gitblit v1.9.1