]> source.dussan.org Git - gitblit.git/commitdiff
bugtraq: Fallback to UTF-8 if commit encoding is unsupported
authorFlorian Zschocke <f.zschocke+git@gmail.com>
Fri, 11 Nov 2022 11:12:13 +0000 (12:12 +0100)
committerFlorian Zschocke <f.zschocke+git@gmail.com>
Fri, 11 Nov 2022 11:12:13 +0000 (12:12 +0100)
Reading the encoding of a commit can result in a Unsupported- or
IllegalCharsetException. This happens when for whatever reason the
commit has an encoding recorded that the system doesn't understand.
Instead of completely failing, fallback to UTF-8.

src/main/bugtraq/com/syntevo/bugtraq/BugtraqConfig.java

index bce0bd8a896012c3dcc53cfa9dbdb0e53e4bcb52..ca0b317f33d3b39461fecc40e327394607bd8a28 100644 (file)
@@ -31,6 +31,9 @@ package com.syntevo.bugtraq;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.IllegalCharsetNameException;
+import java.nio.charset.UnsupportedCharsetException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -55,6 +58,8 @@ import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+
 public final class BugtraqConfig {
 
        // Constants ==============================================================
@@ -229,7 +234,7 @@ public final class BugtraqConfig {
                                        FileMode entmode = tw.getFileMode(0);
                                        if (FileMode.REGULAR_FILE == entmode) {
                                                ObjectLoader ldr = repository.open(entid, Constants.OBJ_BLOB);
-                                               content = new String(ldr.getCachedBytes(), commit.getEncoding());
+                                               content = new String(ldr.getCachedBytes(), guessEncoding(commit));
                                                break;
                                        }
                                }
@@ -265,6 +270,15 @@ public final class BugtraqConfig {
                return baseConfig;
        }
 
+       @NotNull
+       private static Charset guessEncoding(RevCommit commit) {
+               try {
+                       return commit.getEncoding();
+               } catch (IllegalCharsetNameException | UnsupportedCharsetException e) {
+                       return UTF_8;
+               }
+       }
+
        @Nullable
        private static String getString(@Nullable String subsection, @NotNull String key, @NotNull Config config, @Nullable Config baseConfig) {
                final String value = config.getString(BUGTRAQ, subsection, key);