From cdb6588973bde21f0cbab349ac754650ed7f518b Mon Sep 17 00:00:00 2001
From: Sergey Lyubka <valenok@gmail.com>
Date: Wed, 9 Jan 2013 14:30:25 +0000
Subject: [PATCH] Fix to stop misbehaving clients to DoS mongoose

---
 mongoose.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/mongoose.c b/mongoose.c
index 881725af0..d910114ac 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -1693,7 +1693,7 @@ int mg_get_var(const char *data, size_t data_len, const char *name,
 
         // Decode variable into destination buffer
         len = url_decode(p, (size_t)(s - p), dst, dst_len, 1);
-        
+
         // Redirect error code from -1 to -2 (destination buffer too small).
         if (len == -1) {
           len = -2;
@@ -4632,9 +4632,12 @@ static void reset_per_request_attributes(struct mg_connection *conn) {
 }
 
 static void close_socket_gracefully(struct mg_connection *conn) {
+#if defined(_WIN32)
   char buf[MG_BUF_LEN];
+  int n;
+#endif
   struct linger linger;
-  int n, sock = conn->client.sock;
+  int sock = conn->client.sock;
 
   // Set linger option to avoid socket hanging out after close. This prevent
   // ephemeral port exhaust problem under high QPS.
@@ -4646,6 +4649,7 @@ static void close_socket_gracefully(struct mg_connection *conn) {
   (void) shutdown(sock, SHUT_WR);
   set_non_blocking_mode(sock);
 
+#if defined(_WIN32)
   // Read and discard pending incoming data. If we do not do that and close the
   // socket, the data in the send buffer may be discarded. This
   // behaviour is seen on Windows, when client keeps sending data
@@ -4654,6 +4658,7 @@ static void close_socket_gracefully(struct mg_connection *conn) {
   do {
     n = pull(NULL, conn, buf, sizeof(buf));
   } while (n > 0);
+#endif
 
   // Now we know that our FIN is ACK-ed, safe to close
   (void) closesocket(sock);
-- 
GitLab