This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 8.5.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/8.5.x by this push: new d95294f9bc Fix SpotBugs warning - align with 9.0.x d95294f9bc is described below commit d95294f9bc24cf304d30a19e4513732a4807c760 Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed Dec 6 11:55:41 2023 +0000 Fix SpotBugs warning - align with 9.0.x --- .../util/security/ConcurrentMessageDigest.java | 31 +++++++++++----------- .../tomcat/util/security/LocalStrings.properties | 2 ++ .../util/security/LocalStrings_fr.properties | 2 ++ .../util/security/LocalStrings_ja.properties | 2 ++ .../util/security/LocalStrings_ko.properties | 2 ++ .../util/security/LocalStrings_zh_CN.properties | 2 ++ 6 files changed, 26 insertions(+), 15 deletions(-) diff --git a/java/org/apache/tomcat/util/security/ConcurrentMessageDigest.java b/java/org/apache/tomcat/util/security/ConcurrentMessageDigest.java index 89ac51a424..831b5fbe5c 100644 --- a/java/org/apache/tomcat/util/security/ConcurrentMessageDigest.java +++ b/java/org/apache/tomcat/util/security/ConcurrentMessageDigest.java @@ -18,11 +18,12 @@ package org.apache.tomcat.util.security; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.Map; import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; +import org.apache.tomcat.util.res.StringManager; + /** * A thread safe wrapper around {@link MessageDigest} that does not make use * of ThreadLocal and - broadly - only creates enough MessageDigest objects @@ -30,10 +31,12 @@ import java.util.concurrent.ConcurrentLinkedQueue; */ public class ConcurrentMessageDigest { + private static final StringManager sm = StringManager.getManager(ConcurrentMessageDigest.class); + private static final String MD5 = "MD5"; private static final String SHA1 = "SHA-1"; - private static final Map<String,Queue<MessageDigest>> queues = + private static final ConcurrentHashMap<String,Queue<MessageDigest>> queues = new ConcurrentHashMap<>(); @@ -47,7 +50,7 @@ public class ConcurrentMessageDigest { init(MD5); init(SHA1); } catch (NoSuchAlgorithmException e) { - throw new IllegalArgumentException(e); + throw new IllegalArgumentException(sm.getString("concurrentMessageDigest.noDigest"), e); } } @@ -64,11 +67,11 @@ public class ConcurrentMessageDigest { } - public static byte[] digest(String algorithm, int rounds, byte[]... input) { + public static byte[] digest(String algorithm, int iterations, byte[]... input) { Queue<MessageDigest> queue = queues.get(algorithm); if (queue == null) { - throw new IllegalStateException("Must call init() first"); + throw new IllegalStateException(sm.getString("concurrentMessageDigest.noDigest")); } MessageDigest md = queue.poll(); @@ -78,7 +81,7 @@ public class ConcurrentMessageDigest { } catch (NoSuchAlgorithmException e) { // Ignore. Impossible if init() has been successfully called // first. - throw new IllegalStateException("Must call init() first"); + throw new IllegalStateException(sm.getString("concurrentMessageDigest.noDigest"), e); } } @@ -89,8 +92,8 @@ public class ConcurrentMessageDigest { byte[] result = md.digest(); // Subsequent rounds - if (rounds > 1) { - for (int i = 1; i < rounds; i++) { + if (iterations > 1) { + for (int i = 1; i < iterations; i++) { md.update(result); result = md.digest(); } @@ -113,13 +116,11 @@ public class ConcurrentMessageDigest { * JVM */ public static void init(String algorithm) throws NoSuchAlgorithmException { - synchronized (queues) { - if (!queues.containsKey(algorithm)) { - MessageDigest md = MessageDigest.getInstance(algorithm); - Queue<MessageDigest> queue = new ConcurrentLinkedQueue<>(); - queue.add(md); - queues.put(algorithm, queue); - } + if (!queues.containsKey(algorithm)) { + MessageDigest md = MessageDigest.getInstance(algorithm); + Queue<MessageDigest> queue = new ConcurrentLinkedQueue<>(); + queue.add(md); + queues.putIfAbsent(algorithm, queue); } } } diff --git a/java/org/apache/tomcat/util/security/LocalStrings.properties b/java/org/apache/tomcat/util/security/LocalStrings.properties index 9d8090a6ff..39e92df46d 100644 --- a/java/org/apache/tomcat/util/security/LocalStrings.properties +++ b/java/org/apache/tomcat/util/security/LocalStrings.properties @@ -13,5 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +concurrentMessageDigest.noDigest=Digest algorithm unavailable + privilegedSetAccessControlContext.lookupFailed=Unable to obtain reference to field Thread.inheritedAccessControlContext privilegedSetAccessControlContext.setFailed=Unable to set field Thread.inheritedAccessControlContext diff --git a/java/org/apache/tomcat/util/security/LocalStrings_fr.properties b/java/org/apache/tomcat/util/security/LocalStrings_fr.properties index 517abf0418..79bf7f886d 100644 --- a/java/org/apache/tomcat/util/security/LocalStrings_fr.properties +++ b/java/org/apache/tomcat/util/security/LocalStrings_fr.properties @@ -13,5 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +concurrentMessageDigest.noDigest=L'algorithme de digest est introuvable + privilegedSetAccessControlContext.lookupFailed=Impossible d'obtenir une référence pour le champ Thread.inheritedAccessControlContext privilegedSetAccessControlContext.setFailed=Impossible de fixer la valeur du champ Thread.inheritedAccessControlContext diff --git a/java/org/apache/tomcat/util/security/LocalStrings_ja.properties b/java/org/apache/tomcat/util/security/LocalStrings_ja.properties index ec2de16c62..5ae31f866b 100644 --- a/java/org/apache/tomcat/util/security/LocalStrings_ja.properties +++ b/java/org/apache/tomcat/util/security/LocalStrings_ja.properties @@ -13,5 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +concurrentMessageDigest.noDigest=ダイジェストアルゴリズムを利用できません。 + privilegedSetAccessControlContext.lookupFailed=フィールド Thread.inheritedAccessControlContext への参照を取得できません privilegedSetAccessControlContext.setFailed=フィールド Thread.inheritedAccessControlContext を設定できません diff --git a/java/org/apache/tomcat/util/security/LocalStrings_ko.properties b/java/org/apache/tomcat/util/security/LocalStrings_ko.properties index c1447b8c7d..24fba21205 100644 --- a/java/org/apache/tomcat/util/security/LocalStrings_ko.properties +++ b/java/org/apache/tomcat/util/security/LocalStrings_ko.properties @@ -13,5 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +concurrentMessageDigest.noDigest=Digest 알고리즘이 가용하지 않습니다. + privilegedSetAccessControlContext.lookupFailed=Thread.inheritedAccessControlContext 필드를 참조할 수 없습니다. privilegedSetAccessControlContext.setFailed=Thread.inheritedAccessControlContext 필드를 설정할 수 없습니다. diff --git a/java/org/apache/tomcat/util/security/LocalStrings_zh_CN.properties b/java/org/apache/tomcat/util/security/LocalStrings_zh_CN.properties index a3bbfeea6d..bc021bbf9f 100644 --- a/java/org/apache/tomcat/util/security/LocalStrings_zh_CN.properties +++ b/java/org/apache/tomcat/util/security/LocalStrings_zh_CN.properties @@ -13,5 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +concurrentMessageDigest.noDigest=摘要算法不可用 + privilegedSetAccessControlContext.lookupFailed=无法获取对字段 Thread.inheritedAccessControlContext 的引用 privilegedSetAccessControlContext.setFailed=无法设置字段 Thread.inheritedAccessControlContext --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org