On Fri, 8 Nov 2024 16:48:33 GMT, Lothar Kimmeringer <d...@openjdk.org> wrote:

>> - I think we shouldn't care if someone wants to use other regex syntax 
>> matching, maybe someone will find it useful. We just not going to document 
>> this to avoid any confusion, most people will just use `*`. They should be 
>> able to use other regex (with `*` in place of `.*`) as long as at least one 
>> `*` is present and cipher suite starts with "TLS_". Filtering the pattern to 
>> disallow this will result in one extra regex matching operation while we try 
>> to keep things fast.
>> - About just ignoring other regex characters with `Pattern.compile("^\\Q" + 
>> p.replace("*", "\\E.*\\Q") + "\\E$")`: I'm not sure if silently ignoring 
>> those characters is what we want, we should either disallow them (throw an 
>> exception) or allow those characters.
>> - I think the other design change we should consider is to use full regex 
>> without any `*` replacement. Most people who would be setting those values 
>> should be familiar with regex.
>> - Yet another option is to implement custom `*` matching method and not to 
>> use regex at all.
>> - About case-insensitive matching: actually that was the original version of 
>> this code, but other implementations treat cipher suites in case-sensitive 
>> manner, so I modified it to be case-sensitive.
>
>> * I think we shouldn't care if someone wants to use other regex syntax 
>> matching, maybe someone will find it useful. We just not going to document 
>> this to avoid any confusion, most people will just use `*`.
> 
> `*` isn't valid regex (which is why there is this conversion "under the 
> hood") and as a user I don't expect that regex can be used if the 
> documentation only mentions wildcards as they are used for globbing in e.g. 
> bash. So as a user I might expect `?` for a single character to work but 
> would realize quite fast that its use doesn't make much sense in the context 
> of cipher-filtering.
> 
>> They should be able to use other regex (with `*` in place of `.*`) as long 
>> as at least one `*` is present and cipher suite starts with "TLS_".
> 
> I expect funny effects with `*` being used in a different context than `.*`, 
> e.g. `\\d*` (any number of digits). This would be internally converted to 
> `\\d.*` which represents something else completely (a single digit, followed 
> by any number of characters).
> 
>> Filtering the pattern to disallow this will result in one extra regex 
>> matching operation while we try to keep things fast.
> 
> How often is this executed? My understanding is that this is happening during 
> the startup of the VM, so one additional regex operation per cipher shouldn't 
> have a big impact over an application's overall performance. 
> 
>> About just ignoring other regex characters with `Pattern.compile("^\\Q" + 
>> p.replace("*", "\\E.*\\Q") + "\\E$")`: I'm not sure if silently ignoring 
>> those characters is what we want, we should either disallow them (throw an 
>> exception) or allow those characters.
> 
> The support of regex isn't documented, so using special characters in the 
> pattern shouldn't lead to an exception (be it because the pattern happen to 
> be an invalid regex or because you throw one).

- Good point, thanks. After thinking about it I tend to agree. Also, the 
colleague of mine suggested that cipher suites might have dots in the future 
("TLS_1.3_*"). I'l make a change to adopt your suggestion.
- To answer your question: this code is executed on every handshake for every 
supported cipher suite or algorithm.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21841#discussion_r1834880577

Reply via email to