Hello,

For HTTP request body, if neither "Content-Encoding: chunked" nor
"Content-Length" is specified, it should mean body length is 0.

In RFC 9112 Section 6.3, 7.:
|   7.  If this is a request message and none of the above are true, then
|       the message body length is zero (no message body is present).

The behavior can be tested by requesting POST to a cgi, like this:

  $ curl -X POST http://127.0.0.1/cgi-bin/test
  (Ctrl-C is needed without the diff)

ok?

# first round https://marc.info/?l=openbsd-tech&m=158173705129829&w=2

Index: usr.sbin/httpd/server_http.c
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/server_http.c,v
retrieving revision 1.151
diff -u -p -r1.151 server_http.c
--- usr.sbin/httpd/server_http.c        15 Aug 2022 09:36:19 -0000      1.151
+++ usr.sbin/httpd/server_http.c        1 Sep 2022 20:36:10 -0000
@@ -474,12 +474,9 @@ server_read_http(struct bufferevent *bev
                        /* HTTP request payload */
                        if (clt->clt_toread > 0)
                                bev->readcb = server_read_httpcontent;
-
-                       /* Single-pass HTTP body */
-                       if (clt->clt_toread < 0) {
-                               clt->clt_toread = TOREAD_UNLIMITED;
-                               bev->readcb = server_read;
-                       }
+                       if (clt->clt_toread < 0 && !desc->http_chunked)
+                               /* 7. of RFC 9112 Section 6.3 */
+                               clt->clt_toread = 0;
                        break;
                default:
                        server_abort_http(clt, 405, "method not allowed");

Reply via email to