On Thu, 5 Dec 2024 20:45:57 GMT, Martin Balao <mba...@openjdk.org> wrote:
>> In addition to the goals, scope, motivation, specification and requirement >> notes in [JDK-8315487](https://bugs.openjdk.org/browse/JDK-8315487), we >> would like to describe the most relevant decisions taken during the >> implementation of this enhancement. These notes are organized by feature, >> may encompass more than one file or code segment, and are aimed to provide a >> high-level view of this PR. >> >> ## ProvidersFilter >> >> ### Filter construction (parser) >> >> The providers filter is constructed from a string value, taken from either a >> system or a security property with name "jdk.security.providers.filter". >> This process occurs at sun.security.jca.ProvidersFilter class —simply >> referred as ProvidersFilter onward— static initialization. Thus, changes to >> the filter's overridable property are not effective afterwards and no >> assumptions should be made regarding when this class gets initialized. >> >> The filter's string value is processed with a custom parser of order 'n', >> being 'n' the number of characters. The parser, represented by the >> ProvidersFilter.Parser class, can be characterized as a Deterministic Finite >> Automaton (DFA). The ProvidersFilter.Parser::parse method is the starting >> point to get characters from the filter's string value and generate state >> transitions in the parser's internal state-machine. See >> ProvidersFilter.Parser::nextState for more details about the parser's states >> and both valid and invalid transitions. The ParsingState enum defines valid >> parser states and Transition the reasons to move between states. If a filter >> string cannot be parsed, a ProvidersFilter.ParserException exception is >> thrown, and turned into an unchecked IllegalArgumentException in the >> ProvidersFilter.Filter constructor. >> >> While we analyzed —and even tried, at early stages of the development— the >> use of regular expressions for filter parsing, we discarded the approach in >> order to get maximum performance, support a more advanced syntax and have >> flexibility for further extensions in the future. >> >> ### Filter (structure and behavior) >> >> A filter is represented by the ProvidersFilter.Filter class. It consists of >> an ordered list of rules, returned by the parser, that represents filter >> patterns from left to right (see the filter syntax for reference). At the >> end of this list, a match-all and deny rule is added for default behavior. >> When a service is evaluated against the filter, each filter rule is checked >> in the ProvidersFilter.Filter::apply method. The rule makes an all... > > Martin Balao has updated the pull request with a new target base due to a > merge or a rebase. The pull request now contains 15 commits: > > - Merge openjdk/master into JDK-8315487 > > Fix conflict caused by de3a218a2801b8a4b414fce9337bd151ded9b7f8, due to > a change in the imports context: > src/java.base/share/classes/jdk/internal/access/SharedSecrets.java > - Fix typo > - Merge openjdk/master into JDK-8315487 > > Deal with 940aa7c4cf1bf770690660c8bb21fb3ddc5186e4 integration: > src/java.base/share/classes/java/security/Provider.java > Fix minor conflicts due to context changes. > src/java.base/share/classes/sun/security/jca/ProvidersFilter.java > Use getOverridableProperty instead of privilegedGetOverridable. > - Undo SunNativeProvider provider changes. They will be implemented in > JDK-8345221. > - Merge 'openjdk/master' into JDK-8315487. > - Perform some minor adjustments > > Add LF character at the end of the ServicesConsistency.java and > java.security files. > > Change jtreg bug ID of ServicesConsistency.java to refer to the new one > created by @martinuy: https://bugs.openjdk.org/browse/JDK-8345139. > > Remove Security Manager related comments, as #22418 is in the pipeline, > also see https://bugs.openjdk.org/browse/JDK-8338411. > - Merge 'openjdk/master' into JDK-8315487 > > Below is a conflicts resolution summary. > > Trivial conflict, caused by 2a1ae0ff89a8ac364206b09059d9dc884adcc5ac: > src/java.base/share/classes/java/security/Provider.java > > Drop unnecessary change after db85090553ab14a84c3ed0a2604dd56c5b6e6982: > src/java.base/share/lib/security/default.policy > > Trivial conflict, caused by 0329855831102a48abf14b5befc933f84dfd3460: > test/jdk/tools/launcher/Settings.java > - Remove -Xdebug from commented-out debug command > > This is unnecessary, see 842d6329cf5a3da8df7eddb195b5fcb7baadbdc3. > - Merge 'openjdk/master' into JDK-8315487 > > Resolved conflicts: > src/java.base/share/classes/java/security/Provider.java > src/java.base/share/classes/javax/crypto/Cipher.java > src/java.base/share/classes/sun/security/jca/ProviderList.java > src/java.base/share/conf/security/java.security > > src/java.security.jgss/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java > > Additional fixes: > src/java.base/share/classes/java/security/Security.java > Import sun.security.jca.ProvidersFilter, since the sun.security.jca.* > import was removed in c6f1d5f374bfa9bd... Last force-push was just to base this pull request on #22613, we can see that the codebase before and after the force-push is exactly the same. f3c5e58029cfe3c36ae920edd196893d244d65c4 and 96709e3fbab456fe1b9767e1961176c0e5e32aa7 refer to the same code, [`git diff f3c5e58 96709e3`](https://github.com/openjdk/jdk/compare/f3c5e58029cfe3c36ae920edd196893d244d65c4..96709e3fbab456fe1b9767e1961176c0e5e32aa7) show no changes. ------------- PR Comment: https://git.openjdk.org/jdk/pull/15539#issuecomment-2524047081