Re: (tomcat) branch main updated: Fix matching of the pattern documented in the javadoc
Rémy Maucherat <[email protected]> Mon, 3 Aug 2026 21:31:20 +0200
| Newsgroups | gmane.comp.jakarta.tomcat.devel |
|---|---|
| Message-ID | <CANwj8ZpJxrhhJh-2vHOL+etT4BwR7goyKEC+Mj5Er5d42Pf09g@mail.gmail.com> |
On Mon, Aug 3, 2026 at 3:23=E2=80=AFPM Konstantin Kolinko <[email protected]> wrote: > > =D0=BF=D1=82, 31 =D0=B8=D1=8E=D0=BB. 2026=E2=80=AF=D0=B3. =D0=B2 17:18, R= =C3=A9my Maucherat <[email protected]>: > > > > On Fri, Jul 31, 2026 at 2:49=E2=80=AFPM Konstantin Kolinko > > <[email protected]> wrote: > > > > > > =D0=BF=D1=82, 31 =D0=B8=D1=8E=D0=BB. 2026=E2=80=AF=D0=B3. =D0=B2 12:3= 6, <[email protected]>: > > > > > > > > This is an automated email from the ASF dual-hosted git repository. > > > > > > > > rmaucher pushed a commit to branch main > > > > in repository https://gitbox.apache.org/repos/asf/tomcat.git > > > > > > > > > > > > The following commit(s) were added to refs/heads/main by this push: > > > > new 1f29baf341 Fix matching of the pattern documented in the j= avadoc > > > > 1f29baf341 is described below > > > > > > > > commit 1f29baf341220048c66e30aedf43c5b7d0266060 > > > > Author: remm <[email protected]> > > > > AuthorDate: Fri Jul 31 11:35:54 2026 +0200 > > > > > > > > Fix matching of the pattern documented in the javadoc > > > > > > 1. The online documentation was correct (before your change), saying = "matching", > > > and it was not updated by this commit. > > > > > > https://tomcat.apache.org/tomcat-11.0-doc/config/http.html > > > see "noCompressionUserAgents" > > > > I don't consider matching meant using matches(). > > ? > > > The javadoc has always been using the "gorilla|desesplorer|tigrus" > > example pattern, which IMO makes sense. > > Yes, > the sample pattern makes sense, but it is not a real-world example. > > (Real names in a User-Agent header start with an Uppercase character.) > > Personally, I do not consider JavaDoc to be proper documentation on > how to configure Tomcat. Ok, so I've reverted the change then. R=C3=A9my > It is not there by default (only included in the fulldocs bundle), and > we have proper documentation (User Guide and Configuration Reference) > nowadays. > > > > 2. The code using "matches()" is there at least from the first > > > revision of CompressionConfig.java (year 2017) > > > when it was moved there out of org/apache/coyote/http11/Http11Process= or.java > > > > I know. There was no test case for the feature either. There are two > > other occurrences of this usage, all documented with the same kind of > > user-agent pattern matching which won't work. I'd rather fix it. > > In CrawlerSessionManagerValve the default value is that kind of > > pattern. I did not bother adding a test for this one. > > > > Patterns used for mathes() vs used for find() can be converted from > one to another by adding either "^","$" (anchors) or ".*" (any > character pattern) at their ends. > > Case-insensitive matching can be turned on with "(?i)". > > So once you decide on what API to use, it is easy to tailor your > pattern to that API. > > Changing between find() and matches() is not "fixing what does not > work" - either API can be used to get the intended result if you > adjust your pattern. > > > > > > > I know that HTTPD uses find rather than matching the whole string, bu= t > > > our code is 9+ old, > > > so I think that it would be better to just align the documentation > > > with the behaviour. > > > > > > https://httpd.apache.org/docs/current/mod/mod_setenvif.html > > > see BrowserMatch, BrowserMatchNoCase > > > > This is a bit different since in that case you can add more > > directives. We don't have a valve equivalent of this one. > > That was not the point. The point was the regexp patterns used by > those directives. > > Those patterns are for matching using "find()", not "matches()" > Thus they use "^Mozilla" with a "^" anchor character in the example. > > (As I have some background with administering Apache HTTPD, I thought > that was your inspiration as well.) > > So using a pattern tailored for "find()" makes sense. > > Documentation and examples of real-world values: > https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/User-= Agent > > > My problem is that you are changing behaviour in a point release, > and this change is not properly documented. > > I ask to either document the change > - be clear that it is a behaviour change in the changelog, > - be ready to mention this in the Migration Guides, > - update the Configuration Reference > or to revert it. > > Best regards, > Konstantin Kolinko > > > > > Also add a test case for the noCompressionUserAgents feature, c= oauthored > > > > with OpenCode. > > > > --- > > > > java/org/apache/coyote/CompressionConfig.java | 2 +- > > > > .../coyote/TestCompressionConfigUserAgents.java | 67 ++++++++++= ++++++++++++ > > > > webapps/docs/changelog.xml | 6 ++ > > > > 3 files changed, 74 insertions(+), 1 deletion(-) > > > > > > > > diff --git a/java/org/apache/coyote/CompressionConfig.java b/java/o= rg/apache/coyote/CompressionConfig.java > > > > index 7c5efcfec9..b07b8c10b5 100644 > > > > --- a/java/org/apache/coyote/CompressionConfig.java > > > > +++ b/java/org/apache/coyote/CompressionConfig.java > > > > @@ -375,7 +375,7 @@ public class CompressionConfig { > > > > MessageBytes userAgentValueMB =3D request.getMimeH= eaders().getValue("user-agent"); > > > > if (userAgentValueMB !=3D null) { > > > > String userAgentValue =3D userAgentValueMB.toS= tring(); > > > > - if (noCompressionUserAgents.matcher(userAgentV= alue).matches()) { > > > > + if (noCompressionUserAgents.matcher(userAgentV= alue).find()) { > > > > return false; > > > > } > > > > } > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] >