001-hotfix-long-http-headers-txtinfo.patch 1.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
commit d68c96cf53f188030452aadec466aa6389e81511
Author: Henning Rogge <hrogge@gmail.com>
Date:   Tue May 13 21:23:36 2014 +0200

    Hotfix for much too long http headers

diff --git a/lib/txtinfo/src/olsrd_txtinfo.c b/lib/txtinfo/src/olsrd_txtinfo.c
index b56545d..2bcce41 100644
--- a/lib/txtinfo/src/olsrd_txtinfo.c
+++ b/lib/txtinfo/src/olsrd_txtinfo.c
@@ -301,8 +301,15 @@ ipc_action(int fd, void *data __attribute__ ((unused)), unsigned int flags __att
   FD_ZERO(&rfds);
   FD_SET((unsigned int)ipc_connection, &rfds);  /* Win32 needs the cast here */
   if (0 <= select(ipc_connection + 1, &rfds, NULL, NULL, &tv)) {
-    char requ[128];
-    ssize_t s = recv(ipc_connection, (void *)&requ, sizeof(requ), 0);   /* Win32 needs the cast here */
+    char requ[1024];
+    ssize_t s = recv(ipc_connection, (void *)&requ, sizeof(requ)-1, 0);   /* Win32 needs the cast here */
+
+    if (s == sizeof(requ)-1) {
+      /* input was much too long, just skip the rest */
+      char dummy[1024];
+
+      while (recv(ipc_connection, (void *)&dummy, sizeof(dummy), 0) == sizeof(dummy), 0);
+    }
     if (0 < s) {
       requ[s] = 0;
       /* To print out neighbours only on the Freifunk Status
@@ -329,6 +336,7 @@ ipc_action(int fd, void *data __attribute__ ((unused)), unsigned int flags __att
         if (0 != strstr(requ, "/ver")) send_what |= SIW_VERSION;
       }
     }
+
     if ( send_what == 0 ) send_what = SIW_ALL;
   }