I think this has been broken for a while and I came across it while
implementing my own client. The server should notify the client that the
request is malformed but wasn't sending the response when SSL_read
returned SSL_ERROR_WANT_READ.
---
src/server.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/server.c b/src/server.c
index e199f6f..56e11c9 100644
--- a/src/server.c+++ b/src/server.c
@@ -345,7 +345,10 @@ client_readable(struct gmnisrv_server *server, struct gmnisrv_client *client)
switch (e) {
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
- goto queue_ssl_write;+ if (client->bufln == 0) {+ goto queue_ssl_write;+ }+ // intentional fallthrough default:
client_submit_response(client,
GEMINI_STATUS_BAD_REQUEST, error, NULL);
--
2.37.1