From 46bfccb0d57ba75d195be7afa54e37ba0d4321d1 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 12 Jun 2014 18:52:41 -0400
Subject: [PATCH] Fix cloning repositories with + in their names

---
 src/site/administration.mkd                                 |    2 +-
 src/main/java/com/gitblit/servlet/AuthenticationFilter.java |    8 --------
 src/main/java/com/gitblit/utils/StringUtils.java            |    4 +++-
 3 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/gitblit/servlet/AuthenticationFilter.java b/src/main/java/com/gitblit/servlet/AuthenticationFilter.java
index dd821ac..ddb85f4 100644
--- a/src/main/java/com/gitblit/servlet/AuthenticationFilter.java
+++ b/src/main/java/com/gitblit/servlet/AuthenticationFilter.java
@@ -16,8 +16,6 @@
 package com.gitblit.servlet;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import java.security.Principal;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -102,12 +100,6 @@
 			url = url.substring(1);
 		}
 		String fullUrl = url + (StringUtils.isEmpty(params) ? "" : ("?" + params));
-		try {
-			fullUrl = URLDecoder.decode(fullUrl, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			logger.warn("UTF-8 decoding of URL failed: "+fullUrl, e);
-			e.printStackTrace();
-		}
 		return fullUrl;
 	}
 
diff --git a/src/main/java/com/gitblit/utils/StringUtils.java b/src/main/java/com/gitblit/utils/StringUtils.java
index d7e1ea3..087de54 100644
--- a/src/main/java/com/gitblit/utils/StringUtils.java
+++ b/src/main/java/com/gitblit/utils/StringUtils.java
@@ -129,6 +129,8 @@
 				retStr.append("%20");
 			} else if (inStr.charAt(i) == '&') {
 				retStr.append("%26");
+			} else if (inStr.charAt(i) == '+') {
+				retStr.append("%2B");
 			} else {
 				retStr.append(inStr.charAt(i));
 			}
@@ -398,7 +400,7 @@
 	 * @return the first invalid character found or null if string is acceptable
 	 */
 	public static Character findInvalidCharacter(String name) {
-		char[] validChars = { '/', '.', '_', '-', '~' };
+		char[] validChars = { '/', '.', '_', '-', '~', '+' };
 		for (char c : name.toCharArray()) {
 			if (!Character.isLetterOrDigit(c)) {
 				boolean ok = false;
diff --git a/src/site/administration.mkd b/src/site/administration.mkd
index 6fc334e..049a827 100644
--- a/src/site/administration.mkd
+++ b/src/site/administration.mkd
@@ -20,7 +20,7 @@
 	    federationSets = 
 
 #### Repository Names
-Repository names must be case-insensitive-unique but are CASE-SENSITIVE ON CASE-SENSITIVE FILESYSTEMS.  The name must be composed of letters, digits, or `/ _ - . ~`<br/>
+Repository names must be case-insensitive-unique but are CASE-SENSITIVE ON CASE-SENSITIVE FILESYSTEMS.  The name must be composed of letters, digits, or `/ _ - . ~ +`<br/>
 Whitespace is illegal.
 
 Repositories can be grouped within subfolders.  e.g. *libraries/mycoollib.git* and *libraries/myotherlib.git*

--
Gitblit v1.9.1