aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--gmid.h5
-rw-r--r--regress/Makefile1
-rwxr-xr-xregress/max-length-reply3
-rwxr-xr-xregress/runtime3
5 files changed, 15 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 43300e2..3e8e2c6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2021-03-27 Omar Polo <op@omarpolo.com>
+
+ * gmid.h (struct client): correctly handle CGI scripts that replies with the maximum header length allowed
+
2021-03-20 Omar Polo <op@omarpolo.com>
* 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