https://bz.apache.org/bugzilla/show_bug.cgi?id=63855

--- Comment #12 from Konstantin J. Chernov <k.j.cher...@gmail.com> ---
Yann, thank you very much for the detailed explanation and for the patch.

First of all, I finally reproduced the issue, and you were right that it was
caused by a per-request content filter.
And I deeply apologize for not mentioning that we are using some of such
modules (I never thought they can cause such an issue).

I made a small module which is causing this issue when turned on:
https://pastebin.com/3cARnJwm
Also, mod_security is causing this issue as well.

So, the correct steps to reproduce is:
1. Turn on the per-request input filter
2. Send the request with openssl as shown above
3. 100-Continue won't be send until the request body is sent by the client

When I applied your patch, the 100-continue reply was missing the status line:
{code}
POST /service/endpoint HTTP/1.1
Host: host:port
Content-Type: text/xml
Content-Length: 1
Expect: 100-Continue

HTTP/1.1 
{code}

So I modified it like that (I'm not sure whether it is the correct way to
handle this, as I was unable to find when the status_line is set during the
correct flow):
{code}
    /* Send "100 Continue" if needed before spooling */
    if (req->expecting_100) {
        int saved_status = r->status;
        char* saved_status_line = r->status_line;
        r->status = HTTP_CONTINUE;
        r->expecting_100 = 1;
        r->status_line = ap_get_status_line(r->status);

        ap_send_interim_response(r, 1);

        r->status = saved_status;
        r->status_line = saved_status_line;
        req->expecting_100 = 0;
    }
{code}

After I recompiled mod_proxy_http.so with the changes mentioned above, the
issue is gone.

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: bugs-unsubscr...@httpd.apache.org
For additional commands, e-mail: bugs-h...@httpd.apache.org

Reply via email to