Hi,

Slightly reordered some of the CGI fixes from Dec.

- Lauri
>From 2b3753014454afadf3fc17806ef97a7b53006927 Mon Sep 17 00:00:00 2001
From: Lauri Kasanen <[email protected]>
Date: Mon, 17 Dec 2012 18:14:15 +0200
Subject: [PATCH] cgi: More swrite error checks


Signed-off-by: Lauri Kasanen <[email protected]>
---
 plugins/cgi/cgi.c   |    9 +++++----
 plugins/cgi/event.c |   11 +++++++++--
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/plugins/cgi/cgi.c b/plugins/cgi/cgi.c
index 57c7eb0..c6a07ec 100644
--- a/plugins/cgi/cgi.c
+++ b/plugins/cgi/cgi.c
@@ -37,14 +37,15 @@ int swrite(const int fd, const void *buf, const size_t 
count)
 
     while (pos > 0 && ret >= 0) {
         ret = write(fd, buf, pos);
+
+        if (ret < 0)
+            return ret;
+
         pos -= ret;
         buf += ret;
     }
 
-    if (ret < 0)
-        return 0;
-
-    return 1;
+    return count;
 }
 
 static void cgi_write_post(void *p)
diff --git a/plugins/cgi/event.c b/plugins/cgi/event.c
index ff1d48f..67d79c9 100644
--- a/plugins/cgi/event.c
+++ b/plugins/cgi/event.c
@@ -135,14 +135,21 @@ int _mkp_event_write(int socket)
             }
         }
 
+        int ret;
+
         if (r->chunked)
         {
             char tmp[16];
             int len = snprintf(tmp, 16, "%x%s", r->in_len, MK_CRLF);
-            swrite(socket, tmp, len);
+            ret = swrite(socket, tmp, len);
+            if (ret < 0)
+                return MK_PLUGIN_RET_EVENT_CLOSE;
         }
 
-        swrite(socket, outptr, r->in_len);
+        ret = swrite(socket, outptr, r->in_len);
+        if (ret < 0)
+            return MK_PLUGIN_RET_EVENT_CLOSE;
+
         r->in_len = 0;
         mk_api->event_socket_change_mode(socket, MK_EPOLL_SLEEP, 
MK_EPOLL_LEVEL_TRIGGERED);
         mk_api->event_socket_change_mode(r->fd, MK_EPOLL_READ, 
MK_EPOLL_LEVEL_TRIGGERED);
-- 
1.7.2.1

_______________________________________________
Monkey mailing list
[email protected]
http://lists.monkey-project.com/listinfo/monkey

Reply via email to