diff --git a/ChangeLog b/ChangeLog index 43300e2..3e8e2c6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2021-03-27 Omar Polo + + * gmid.h (struct client): correctly handle CGI scripts that replies with the maximum header length allowed + 2021-03-20 Omar Polo * 1.6 tagged diff --git a/gmid.h b/gmid.h index 7e9bba0..8188bf9 100644 --- a/gmid.h +++ b/gmid.h @@ -180,8 +180,11 @@ struct client { const char *meta; int fd, pfd; DIR *dir; - char sbuf[1024]; + + /* big enough to store STATUS + SPACE + META + CRLF */ + char sbuf[1029]; ssize_t len, off; + struct sockaddr_storage addr; struct vhost *host; /* host they're talking to */ }; diff --git a/regress/Makefile b/regress/Makefile index 317a460..b485d64 100644 --- a/regress/Makefile +++ b/regress/Makefile @@ -68,6 +68,7 @@ testdata: fill-file printf "# hello world\n" > testdata/index.gmi ./sha testdata/index.gmi testdata/index.gmi.sha cp hello slow err invalid serve-bigfile env testdata/ + cp max-length-reply testdata mkdir testdata/dir cp hello testdata/dir cp testdata/index.gmi testdata/dir/foo.gmi diff --git a/regress/max-length-reply b/regress/max-length-reply new file mode 100755 index 0000000..0311158 --- /dev/null +++ b/regress/max-length-reply @@ -0,0 +1,3 @@ +#!/bin/sh + +printf '20 iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\r\n' diff --git a/regress/runtime b/regress/runtime index 80bf32c..d24ac08 100755 --- a/regress/runtime +++ b/regress/runtime @@ -183,6 +183,9 @@ echo OK GET /err with cgi eq "$(raw /invalid | wc -c | xargs)" 2048 "Unexpected body for /invalid" echo OK GET /invalid with cgi +eq "$(raw /max-length-reply | wc -c | xargs)" 1029 "Unexpected header for /max-length-reply" +echo OK GET /max-length-reply with cgi + # try a big file eq "$(head /serve-bigfile)" "20 application/octet-stream" "Unexpected head for /serve-bigfile" get /bigfile > bigfile