diff options
author | Leonard Broman <leonard.broman@gmail.com> | 2011-04-08 21:09:04 +0200 |
---|---|---|
committer | Chris Aniszczyk <caniszczyk@gmail.com> | 2011-04-11 11:55:55 -0500 |
commit | 09be3948cd85171fa3a13d937c7125876e27a273 (patch) | |
tree | ce52adffbececacd166d9d0926ec2abefad1730b /org.eclipse.jgit/src | |
parent | e109529d6f7f9c69e6fe7e864b90cdcafe998cf0 (diff) | |
download | jgit-09be3948cd85171fa3a13d937c7125876e27a273.tar.gz jgit-09be3948cd85171fa3a13d937c7125876e27a273.zip |
Hande latin-1 encoding
Bug: 342259
Change-Id: Ie285b8819b5ea6f9892ebafc4ebbd9c6d091d1fe
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
Diffstat (limited to 'org.eclipse.jgit/src')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java index 598ebaeb97..9eb32cb997 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java @@ -54,7 +54,11 @@ import java.nio.charset.CharacterCodingException; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CodingErrorAction; +import java.nio.charset.IllegalCharsetNameException; +import java.nio.charset.UnsupportedCharsetException; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.PersonIdent; @@ -67,7 +71,12 @@ public final class RawParseUtils { private static final byte[] footerLineKeyChars; + private static final Map<String, Charset> encodingAliases; + static { + encodingAliases = new HashMap<String, Charset>(); + encodingAliases.put("latin-1", Charset.forName("ISO-8859-1")); + digits10 = new byte['9' + 1]; Arrays.fill(digits10, (byte) -1); for (char i = '0'; i <= '9'; i++) @@ -651,7 +660,20 @@ public final class RawParseUtils { if (enc < 0) return Constants.CHARSET; final int lf = nextLF(b, enc); - return Charset.forName(decode(Constants.CHARSET, b, enc, lf - 1)); + String decoded = decode(Constants.CHARSET, b, enc, lf - 1); + try { + return Charset.forName(decoded); + } catch (IllegalCharsetNameException badName) { + Charset aliased = charsetForAlias(decoded); + if (aliased != null) + return aliased; + throw badName; + } catch (UnsupportedCharsetException badName) { + Charset aliased = charsetForAlias(decoded); + if (aliased != null) + return aliased; + throw badName; + } } /** @@ -1060,6 +1082,10 @@ public final class RawParseUtils { return pos; } + private static Charset charsetForAlias(String name) { + return encodingAliases.get(StringUtils.toLowerCase(name)); + } + private RawParseUtils() { // Don't create instances of a static only utility. } |