commit 901905e0cf0f5f141461df7ea199711ea951c919 from: Omar Polo date: Wed Jan 05 18:58:01 2022 UTC bail out of client_read if we've already decide what to do libevent2 can still somehowe call client_read even in code paths that never enable reading from the evbuffer. Can't reproduce on the libevent in base on OpenBSD. It's a bit ugly, but it's a small workaround for something that otherwise *always* make gmid crash when linked against libevent2. (client_read works under the assumption that c->host != NULL, matched_proxy crashes otherwise.) commit - 876a417023a6a38cc61f61bf3083305455a7f8ec commit + 901905e0cf0f5f141461df7ea199711ea951c919 blob - 0c8a4aeabc282f6e91e216e2f7ad83750b034c00 blob + 6474e4f2082de54f71140c48597daa96cc9c4006 --- regress/regress +++ regress/regress @@ -53,5 +53,6 @@ run_test test_macro_expansion run_test test_174_bugfix run_test test_proxy_relay_to run_test test_proxy_with_certs +run_test test_unknown_host tests_done blob - 398c4580eaf5ad854d0fbabe9d93bfbbcc621c06 blob + 9fae42d965287091b16aee1f801f578eccfce96e --- regress/tests.sh +++ regress/tests.sh @@ -361,4 +361,12 @@ test_proxy_with_certs() { fetch / check_reply "60 client certificate required" || return 1 +} + +test_unknown_host() { + setup_simple_test '' '' + + ggflags="-N -H foobar" + fetch / + check_reply '59 Wrong/malformed host or missing SNI' } blob - cd994fb6855b76a4a0375237ce0de4a135cebd19 blob + 2f5912c34afd1ea9454b51741b18b5e9389a4ffe --- server.c +++ server.c @@ -1003,6 +1003,14 @@ client_read(struct bufferevent *bev, void *d) size_t len; bufferevent_disable(bev, EVBUFFER_READ); + + /* + * libevent2 can still somehow call this function, even + * though I never enable EV_READ in the bufferevent. If + * that's the case, bail out. + */ + if (c->type != REQUEST_UNDECIDED) + return; /* max url len + \r\n */ if (EVBUFFER_LENGTH(src) > 1024 + 2) {