пт, 25 окт. 2024 г. в 15:45, Mark Thomas <ma...@apache.org>: > > On 24/10/2024 18:47, Rémy Maucherat wrote: > > On Thu, Oct 24, 2024 at 7:11 PM Mark Thomas <ma...@apache.org> wrote: > >> > >> On 24/10/2024 15:56, r...@apache.org wrote: > >>> This is an automated email from the ASF dual-hosted git repository. > >>> > >>> remm 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 7767b84d42 Create a HttpParser if none is found > >>> 7767b84d42 is described below > >>> > >>> commit 7767b84d422cda47b55125eac892f08ad78883ac > >>> Author: remm <r...@apache.org> > >>> AuthorDate: Thu Oct 24 16:55:57 2024 +0200 > >>> > >>> Create a HttpParser if none is found > >>> > >>> Lifecycle is not enforced in these components, and init actually > >>> does > >>> little (JMX, protocol handlers, upgrade protocols; all likely not > >>> used > >>> and maybe not desired). > >>> Normally HTTP/2 is always fine since it has to use init to work. > >>> Reported NPE in Http11InputBuffer from a user with a "working" > >>> embedded > >>> Tomcat before 9.0.93. > >>> --- > >>> java/org/apache/coyote/http11/Http11Processor.java | 16 > >>> ++++++++++++++-- > >>> webapps/docs/changelog.xml | 7 +++++++ > >>> 2 files changed, 21 insertions(+), 2 deletions(-) > >>> > >>> diff --git a/java/org/apache/coyote/http11/Http11Processor.java > >>> b/java/org/apache/coyote/http11/Http11Processor.java > >>> index 7daa79549a..d34e1772c3 100644 > >>> --- a/java/org/apache/coyote/http11/Http11Processor.java > >>> +++ b/java/org/apache/coyote/http11/Http11Processor.java > >>> @@ -146,11 +146,23 @@ public class Http11Processor extends > >>> AbstractProcessor { > >>> private SendfileDataBase sendfileData = null; > >>> > >>> > >>> + /** > >>> + * Http parser. > >>> + */ > >>> + private final HttpParser httpParser; > >>> + > >>> + > >>> public Http11Processor(AbstractHttp11Protocol<?> protocol, Adapter > >>> adapter) { > >>> super(adapter); > >>> this.protocol = protocol; > >>> > >>> - inputBuffer = new Http11InputBuffer(request, > >>> protocol.getMaxHttpRequestHeaderSize(), protocol.getHttpParser()); > >>> + HttpParser httpParser = protocol.getHttpParser(); > >>> + if (httpParser == null) { > >>> + httpParser = new HttpParser(protocol.getRelaxedPathChars(), > >>> protocol.getRelaxedQueryChars()); > >>> + } > >>> + this.httpParser = httpParser; > >> > >> Maybe move this to protocol.getHttpParser() ? > >> > >> That way we get one HttpParser per protocol instance. One per > >> HttpProcessor requires a noticeable amount of memory. > > > > I'm not sure what the user was doing with the lifecycle, probably not > > calling protocol init or something like that. The log looked > > incoherent. Basically the code reverts the previous commit if > > protocol.getHttpParser() == null, which seems fair. > > Moving it to protocol.getHttpParser() is an idea, but it might need to > > be volatile and coverity could complain about it. This would make > > things worse since this situation should not happen at all (maybe I > > can add a log ?). > > Fair enough. A warning log that the correct lifecycle isn't being > followed seems like a good idea to me.
Looking at the thread "Tomcat 9.0.96 first start throws java.lang.NullPointerException. Works in the same conditions with 9.0.91." on users@, original reporter provided more logs, and there is a connector initialisation failure that precedes this issue. If a connector fails to initialize, it should not be used to serve requests. I feel that using such a failed connector may lead to a whole can of issues. Misconfigured (missing) HttpParser is just one of them. (I mean that in theory a misconfigured connector may mean HTTP instead of HTTPS, using weak ciphers instead of configured strong ones, and similar issues.) Thus with updated information on the issue, I see no worth in this change. We would better fix the lifecycle. (I'll comment on the original thread on users@). Best regards, Konstantin Kolinko --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org