info: sanitise the request right after it's been received
authorFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 8 Dec 2016 09:30:30 +0000 (10:30 +0100)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Wed, 4 Jan 2017 08:47:10 +0000 (09:47 +0100)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/info/olsrd_info.c

index b07800f..91fd72d 100644 (file)
@@ -749,6 +749,22 @@ static void ipc_action(int fd, void *data __attribute__ ((unused)), unsigned int
     req[sizeof(req_buffer) - 1] = '\0';
   }
 
     req[sizeof(req_buffer) - 1] = '\0';
   }
 
+  /* sanitise the request */
+  if (rx_count > 0) {
+    req = cutAtFirstEOL(req, (size_t*) &rx_count);
+
+    req = stripTrailingWhitespace(req, (size_t*) &rx_count);
+    req = skipLeadingWhitespace(req, (size_t*) &rx_count);
+
+    /* detect http requests */
+    req = parseRequest(req, (size_t*) &rx_count);
+
+    req = stripTrailingWhitespace(req, (size_t*) &rx_count);
+    req = stripTrailingSlashes(req, (size_t*) &rx_count);
+    req = skipLeadingWhitespace(req, (size_t*) &rx_count);
+    req = skipMultipleSlashes(req, (size_t*) &rx_count);
+  }
+
   if (outbuffer.count >= MAX_CLIENTS) {
     /* limit the number of replies that are in-flight */
     drain_request(ipc_connection);
   if (outbuffer.count >= MAX_CLIENTS) {
     /* limit the number of replies that are in-flight */
     drain_request(ipc_connection);
@@ -826,18 +842,6 @@ static void ipc_action(int fd, void *data __attribute__ ((unused)), unsigned int
 
   /* 0 < rx_count < sizeof(requ) */
 
 
   /* 0 < rx_count < sizeof(requ) */
 
-  req = cutAtFirstEOL(req, (size_t*) &rx_count);
-
-  req = stripTrailingWhitespace(req, (size_t*) &rx_count);
-  req = skipLeadingWhitespace(req, (size_t*) &rx_count);
-
-  req = parseRequest(req, (size_t*) &rx_count);
-
-  req = stripTrailingWhitespace(req, (size_t*) &rx_count);
-  req = stripTrailingSlashes(req, (size_t*) &rx_count);
-  req = skipLeadingWhitespace(req, (size_t*) &rx_count);
-  req = skipMultipleSlashes(req, (size_t*) &rx_count);
-
   if (!rx_count //
       || ((rx_count == 1) && (*req == '/'))) {
     /* empty or '/' */
   if (!rx_count //
       || ((rx_count == 1) && (*req == '/'))) {
     /* empty or '/' */