This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 707d520780eb8c7db25ff1c12b158b378e42f0fc
Author: Benoit Tellier <[email protected]>
AuthorDate: Fri May 6 11:10:19 2022 +0700

    [PERF] Decode UTF-7 only if needed
    
    UTF-7 decoding is only needed if some characters
    are UTF-7 encoded, which happens if the switching
    character `&` is present.
    
    If absent we can skip the UTF-7 decoding step,
    which saves ~10% of IMAP command parsing allocation
    (string copy and coder charBuffer allocation) and
    ~6% of IMAP command parsing CPU time.
---
 .../main/java/org/apache/james/imap/api/display/ModifiedUtf7.java    | 5 +++++
 1 file changed, 5 insertions(+)

diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/api/display/ModifiedUtf7.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/api/display/ModifiedUtf7.java
index f132e87189..e39ffd91e2 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/api/display/ModifiedUtf7.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/api/display/ModifiedUtf7.java
@@ -22,11 +22,13 @@ import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
 
 import com.beetstra.jutf7.CharsetProvider;
+import com.google.common.base.CharMatcher;
 
 /**
  * This class has some methods included which helps to encode/decode modified 
UTF7
  */
 public class ModifiedUtf7 {
+    private static final CharMatcher UNENCODED_CHAR_MATCHER = 
CharMatcher.isNot('&');
 
     private static final Charset X_MODIFIED_UTF_7_CHARSET = new 
CharsetProvider().charsetForName("X-MODIFIED-UTF-7");
 
@@ -37,6 +39,9 @@ public class ModifiedUtf7 {
      * @return decoded value
      */
     public static String decodeModifiedUTF7(String input) {
+        if (UNENCODED_CHAR_MATCHER.matchesAllOf(input)) {
+            return input;
+        }
         return 
X_MODIFIED_UTF_7_CHARSET.decode(ByteBuffer.wrap(input.getBytes())).toString();
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to