From f71c37bdb3370d56e830de2957bdcaf4879c25cb Mon Sep 17 00:00:00 2001 From: Mark Powers Date: Tue, 14 Jul 2026 14:47:16 +0000 Subject: [PATCH] =?UTF-8?q?8358549:=20O(n=C2=B2)=20time=20complexity=20in?= =?UTF-8?q?=20java.security.Provider.parseLegacy()=20method?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: mullan, djelinski --- .../share/classes/java/security/Provider.java | 13 ++++++++++--- .../java/security/Provider/SupportsParameter.java | 8 +++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/java.base/share/classes/java/security/Provider.java b/src/java.base/share/classes/java/security/Provider.java index f95caa1d920..e4b6109bfb0 100644 --- a/src/java.base/share/classes/java/security/Provider.java +++ b/src/java.base/share/classes/java/security/Provider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1084,9 +1084,16 @@ public abstract class Provider extends Properties { String stdAlg = attrString.substring(0, i).intern(); String attrName = attrString.substring(i + 1); // kill additional spaces - while (attrName.startsWith(" ")) { - attrName = attrName.substring(1); + int pos = 0; + for (; pos < attrName.length(); pos++) { + if (attrName.charAt(pos) != ' ') { + break; + } } + if (pos > 0) { + attrName = attrName.substring(pos); + } + attrName = attrName.intern(); ServiceKey stdKey = new ServiceKey(type, stdAlg, true); Service stdService = legacyMap.get(stdKey); diff --git a/test/jdk/java/security/Provider/SupportsParameter.java b/test/jdk/java/security/Provider/SupportsParameter.java index 039fb3d0797..3325ad9680a 100644 --- a/test/jdk/java/security/Provider/SupportsParameter.java +++ b/test/jdk/java/security/Provider/SupportsParameter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ /** * @test - * @bug 4911081 8130181 + * @bug 4911081 8130181 8358549 * @library /test/lib * @summary verify that Provider.Service.supportsParameter() works * @author Andreas Sterbenz @@ -112,7 +112,9 @@ public class SupportsParameter { put("Signature.DSA0", "foo.DSA0"); put("Signature.DSA", "foo.DSA"); - put("Signature.DSA SupportedKeyClasses", + // Extra spaces between "Signature.DSA" and "SupportedKeyClasses" + // are used to verify that whitespace is trimmed. + put("Signature.DSA SupportedKeyClasses", "java.security.interfaces.DSAPublicKey" + "|java.security.interfaces.DSAPrivateKey");