From df550007fe30a0f9ac0a650b8587932848e70d33 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 15 May 2013 15:49:58 -0400
Subject: [PATCH] Close file descriptor leak (issue-199)

---
 src/main/java/com/gitblit/GitBlit.java |   23 +++++++++++++++++++----
 1 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index 93293d8..f017d21 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -3509,6 +3509,8 @@
 			// extract the resource to the directory if it does not exist
 			File f = new File(toDir, resource.substring(path.length()));
 			if (!f.exists()) {
+				InputStream is = null;
+				OutputStream os = null;
 				try {
 					if (resource.charAt(resource.length() - 1) == '/') {
 						// directory
@@ -3517,20 +3519,33 @@
 					} else {
 						// file
 						f.getParentFile().mkdirs();
-						InputStream is = context.getResourceAsStream(resource);
-						OutputStream os = new FileOutputStream(f);
+						is = context.getResourceAsStream(resource);
+						os = new FileOutputStream(f);
 						byte [] buffer = new byte[4096];
 						int len = 0;
 						while ((len = is.read(buffer)) > -1) {
 							os.write(buffer, 0, len);
 						}
-						is.close();
-						os.close();
 					}
 				} catch (FileNotFoundException e) {
 					logger.error("Failed to find resource \"" + resource + "\"", e);
 				} catch (IOException e) {
 					logger.error("Failed to copy resource \"" + resource + "\" to " + f, e);
+				} finally {
+					if (is != null) {
+						try {
+							is.close();
+						} catch (IOException e) {
+							// ignore
+						}
+					}
+					if (os != null) {
+						try {
+							os.close();
+						} catch (IOException e) {
+							// ignore
+						}
+					}
 				}
 			}
 		}

--
Gitblit v1.9.1