From 6d874a0cb27092a1c7c3eae3dfe660ffcd8d48e6 Mon Sep 17 00:00:00 2001 From: James Moger Date: Mon, 9 Jan 2012 20:46:54 -0500 Subject: [PATCH] Plugged some repository use count leaks in the zip servlet --- src/com/gitblit/Constants.java | 6 +++++- src/com/gitblit/DownloadZipServlet.java | 27 ++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/com/gitblit/Constants.java b/src/com/gitblit/Constants.java index 602a6aef..23e75572 100644 --- a/src/com/gitblit/Constants.java +++ b/src/com/gitblit/Constants.java @@ -54,13 +54,17 @@ public class Constants { public static final String FEDERATION_PATH = "/federation/"; public static final String RPC_PATH = "/rpc/"; + + public static final String PAGES= "/pages/"; public static final String BORDER = "***********************************************************"; public static final String FEDERATION_USER = "$gitblit"; public static final String PROPOSAL_EXT = ".json"; - + + public static final String ENCODING = "UTF-8"; + public static String getGitBlitVersion() { return NAME + " v" + VERSION; } diff --git a/src/com/gitblit/DownloadZipServlet.java b/src/com/gitblit/DownloadZipServlet.java index ed3aa553..209272f2 100644 --- a/src/com/gitblit/DownloadZipServlet.java +++ b/src/com/gitblit/DownloadZipServlet.java @@ -15,8 +15,12 @@ */ package com.gitblit; +import java.io.IOException; +import java.text.MessageFormat; +import java.text.ParseException; import java.util.Date; +import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletResponse; @@ -26,6 +30,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.gitblit.utils.JGitUtils; +import com.gitblit.utils.MarkdownUtils; import com.gitblit.utils.StringUtils; /** @@ -79,7 +84,7 @@ public class DownloadZipServlet extends HttpServlet { response.sendError(HttpServletResponse.SC_FORBIDDEN); return; } - + String repository = request.getParameter("r"); String basePath = request.getParameter("p"); String objectId = request.getParameter("h"); @@ -98,8 +103,18 @@ public class DownloadZipServlet extends HttpServlet { } Repository r = GitBlit.self().getRepository(repository); + if (r == null) { + error(response, MessageFormat.format("# Error\nFailed to find repository {0}", repository)); + return; + } RevCommit commit = JGitUtils.getCommit(r, objectId); + if (commit == null) { + error(response, MessageFormat.format("# Error\nFailed to find commit {0}", objectId)); + r.close(); + return; + } Date date = JGitUtils.getCommitDate(commit); + String contentType = "application/octet-stream"; response.setContentType(contentType + "; charset=" + response.getCharacterEncoding()); response.setHeader("Content-Disposition", "attachment; filename=\"" + name + ".zip" @@ -115,11 +130,21 @@ public class DownloadZipServlet extends HttpServlet { } catch (Throwable t) { logger.error("Failed to write attachment to client", t); } + + // close the repository + r.close(); } catch (Throwable t) { logger.error("Failed to write attachment to client", t); } } + private void error(HttpServletResponse response, String mkd) throws ServletException, + IOException, ParseException { + String content = MarkdownUtils.transformMarkdown(mkd); + response.setContentType("text/html; charset=" + Constants.ENCODING); + response.getWriter().write(content); + } + @Override protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, -- 2.39.5