Przeglądaj źródła

Merge pull request #533 from sawolf/post-header-recv

check_http: Fix issue with page length calculation
Sebastian Wolf 6 lat temu
rodzic
commit
fae7244eb3
2 zmienionych plików z 6 dodań i 5 usunięć
  1. 1 0
      NEWS
  2. 5 5
      plugins/check_http.c

+ 1 - 0
NEWS

@@ -2,6 +2,7 @@ This file documents the major additions and syntax changes between releases.
 
 2.3.2 2020-03-??
 	FIXES
+	check_http: Fix several issues related to page length calculation (#535, #533, #536)
 	check_icmp: fix issues when not running in debug mode (#530)
 
 2.3.2 2020-02-20

+ 5 - 5
plugins/check_http.c

@@ -939,7 +939,7 @@ int
 get_content_length (const char *headers)
 {
     const char *s;
-    int content_length = 0;
+    int content_length = -1;
 
     s = headers;
     while (*s) {
@@ -1195,7 +1195,7 @@ check_http (void)
         if ((full_page_new = realloc(full_page, pagesize + i + 1)) == NULL)
             die (STATE_UNKNOWN, _("HTTP UNKNOWN - Could not allocate memory for full_page\n"));
 
-        memmove(&full_page_new[pagesize], buffer, i);
+        memmove(&full_page_new[pagesize], buffer, i + 1);
         /*free (full_page);*/
         full_page = full_page_new;
         pagesize += i;
@@ -1219,14 +1219,14 @@ check_http (void)
         }
         seen_length = pagesize - content_start;
         /* Continue receiving the body until content-length is met */
-        while (seen_length < content_length
-            && (i = my_recv(buffer, MAX_INPUT_BUFFER-1) > 0)) {
+        while ((content_length < 0 || seen_length < content_length)
+            && ((i = my_recv(buffer, MAX_INPUT_BUFFER-1)) > 0)) {
 
             buffer[i] = '\0';
 
             if ((full_page_new = realloc(full_page, pagesize + i + 1)) == NULL)
                 die (STATE_UNKNOWN, _("HTTP UNKNOWN - Could not allocate memory for full_page\n"));
-            memmove(&full_page_new[pagesize], buffer, i);
+            memmove(&full_page_new[pagesize], buffer, i + 1);
             full_page = full_page_new;
 
             pagesize += i;