From aad622a6933a8e334aea8c8b8a644a1b6e39bc61 Mon Sep 17 00:00:00 2001 From: Florian Zschocke Date: Fri, 11 Nov 2022 11:58:23 +0100 Subject: [PATCH] Remove workaround for JGit crashing on 'utf-9' etc Updating JGit fixed the issue that a commit in a repo with an unknown character set throws an exception. This would crash the RepositoryManager. The extra handling, which patches JGit classes during runtime is completely removed. --- .../gitblit/manager/RepositoryManager.java | 43 ------- src/main/java/com/gitblit/utils/MapUtils.java | 116 ------------------ 2 files changed, 159 deletions(-) delete mode 100644 src/main/java/com/gitblit/utils/MapUtils.java diff --git a/src/main/java/com/gitblit/manager/RepositoryManager.java b/src/main/java/com/gitblit/manager/RepositoryManager.java index efbdef6a..8d18c811 100644 --- a/src/main/java/com/gitblit/manager/RepositoryManager.java +++ b/src/main/java/com/gitblit/manager/RepositoryManager.java @@ -19,11 +19,8 @@ import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.net.URI; import java.net.URISyntaxException; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -55,7 +52,6 @@ import org.eclipse.jgit.storage.file.FileBasedConfig; import org.eclipse.jgit.storage.file.WindowCacheConfig; import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.FileUtils; -import org.eclipse.jgit.util.RawParseUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -89,7 +85,6 @@ import com.gitblit.utils.CommitCache; import com.gitblit.utils.DeepCopier; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.JGitUtils.LastChange; -import com.gitblit.utils.MapUtils; import com.gitblit.utils.MetricUtils; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.ObjectCache; @@ -1927,7 +1922,6 @@ public class RepositoryManager implements IRepositoryManager { } } - @SuppressWarnings("unchecked") protected void configureJGit() { // Configure JGit WindowCacheConfig cfg = new WindowCacheConfig(); @@ -1948,43 +1942,6 @@ public class RepositoryManager implements IRepositoryManager { } catch (IllegalArgumentException e) { logger.error("Failed to configure JGit parameters!", e); } - - try { - // issue-486/ticket-151: UTF-9 & UTF-18 - // issue-560/ticket-237: 'UTF8' - Field field = RawParseUtils.class.getDeclaredField("encodingAliases"); - field.setAccessible(true); - - Map encodingAliases; - - try { - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); - - // Since unknown encodingAliases cause GitBlit to crash we replace the - // map by a wrapper class that always returns a value. ISO-8859-1 seems - // appropriate since it is a fixed 8-bit encoding. - encodingAliases = (Map) field.get(null); - encodingAliases = MapUtils.defaultMap(encodingAliases, StandardCharsets.ISO_8859_1); - field.set(null, encodingAliases); - - modifiersField.setInt(field, field.getModifiers() | Modifier.FINAL); - modifiersField.setAccessible(false); - } catch(Throwable t) { - logger.error("Failed to inject wrapper class for encoding Aliases", t); - encodingAliases = (Map) field.get(null); - } - - // Provided sensible default mappings - encodingAliases.put("'utf8'", RawParseUtils.UTF8_CHARSET); - encodingAliases.put("utf-9", RawParseUtils.UTF8_CHARSET); - encodingAliases.put("utf-18", RawParseUtils.UTF8_CHARSET); - - logger.info("Alias 'UTF8', UTF-9 & UTF-18 encodings as UTF-8 in JGit"); - } catch (Throwable t) { - logger.error("Failed to inject UTF-9 & UTF-18 encoding aliases into JGit", t); - } } protected void configureCommitCache() { diff --git a/src/main/java/com/gitblit/utils/MapUtils.java b/src/main/java/com/gitblit/utils/MapUtils.java deleted file mode 100644 index 98568780..00000000 --- a/src/main/java/com/gitblit/utils/MapUtils.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.gitblit.utils; - -import java.text.MessageFormat; -import java.util.Collection; -import java.util.Map; -import java.util.Set; - -import org.apache.mina.util.ConcurrentHashSet; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * A utility wrapper class to generate a default value over an existing map - * - * @author Jan Vanhercke - * - */ -public class MapUtils { - - private static final Logger logger = LoggerFactory.getLogger(MapUtils.class); - - public static Map defaultMap(Map delegate, V value) { - return new Wrap<>(delegate, value); - } - - private static class Wrap implements Map { - - private Map delegate; - - // HashSet is only used to reduce logging - - private Set unknownKeys = new ConcurrentHashSet<>(); - - private V value; - - private Wrap(Map delegate, V value) { - this.delegate = delegate; - this.value = value; - } - - @Override - public int size() { - return delegate.size(); - } - - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - @Override - public boolean containsKey(Object key) { - return true; - } - - @Override - public boolean containsValue(Object value) { - return true; - } - - @SuppressWarnings("unchecked") - @Override - public V get(Object key) { - V retv = delegate.get(key); - - if (retv == null) { - if (unknownKeys.add((K) key)) - logger.error(MessageFormat.format("Default value {0} generated for key {1}", value, key)); - - return value; - } - - return retv; - } - - @Override - public V put(K key, V value) { - return delegate.put(key, value); - } - - @Override - public V remove(Object key) { - V retv = delegate.remove(key); - - if (retv == null) - return value; - - return value; - } - - @Override - public void putAll(Map m) { - delegate.putAll(m); - } - - @Override - public void clear() { - delegate.clear(); - } - - @Override - public Set keySet() { - return delegate.keySet(); - } - - @Override - public Collection values() { - return delegate.values(); - } - - @Override - public Set> entrySet() { - return delegate.entrySet(); - } - } -} -- 2.39.5