]> source.dussan.org Git - jgit.git/commitdiff
Replace custom encoder Constants#encodeASCII by JDK implementation 48/1203548/3
authorMatthias Sohn <matthias.sohn@sap.com>
Fri, 6 Sep 2024 11:42:27 +0000 (13:42 +0200)
committerLuca Milanesio <luca.milanesio@gmail.com>
Sat, 9 Nov 2024 23:20:01 +0000 (23:20 +0000)
Ensure that the method still throws an IllegalArgumentException for
malformed input or if the String contains unmappable characters.

Change-Id: I6a340aa1af60c315272ff13b6bf2041ba30c94ca
(cherry picked from commit 0fd76114e3436ac635641d06371fd8833179312d)

org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java

index 5d7eacb4b8ddaf61c416b7f6b583da27b38ca9a9..1a2f735622e5a6a9c4a2af3a06139f13b98368de 100644 (file)
 
 package org.eclipse.jgit.lib;
 
+import static java.nio.charset.StandardCharsets.US_ASCII;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 import java.nio.charset.Charset;
+import java.nio.CharBuffer;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CodingErrorAction;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.text.MessageFormat;
@@ -667,14 +672,15 @@ public final class Constants {
         *             the 7-bit ASCII character space.
         */
        public static byte[] encodeASCII(String s) {
-               final byte[] r = new byte[s.length()];
-               for (int k = r.length - 1; k >= 0; k--) {
-                       final char c = s.charAt(k);
-                       if (c > 127)
-                               throw new IllegalArgumentException(MessageFormat.format(JGitText.get().notASCIIString, s));
-                       r[k] = (byte) c;
+               try {
+                       CharsetEncoder encoder = US_ASCII.newEncoder()
+                                       .onUnmappableCharacter(CodingErrorAction.REPORT)
+                                       .onMalformedInput(CodingErrorAction.REPORT);
+                       return encoder.encode(CharBuffer.wrap(s)).array();
+               } catch (CharacterCodingException e) {
+                       throw new IllegalArgumentException(
+                                       MessageFormat.format(JGitText.get().notASCIIString, s), e);
                }
-               return r;
        }
 
        /**