Make SKB behaviour more robust in case of overflow.
authorGerd Zellweger <mail@gerdzellweger.com>
Mon, 4 May 2015 15:18:56 +0000 (17:18 +0200)
committerGerd Zellweger <mail@gerdzellweger.com>
Mon, 4 May 2015 15:21:44 +0000 (17:21 +0200)
Also increase buffer size because it tended to overflow for larger queries.

Signed-off-by: Gerd Zellweger <mail@gerdzellweger.com>

include/octopus/definitions.h
include/octopus/parser/ast.h
include/octopus_server/service.h
usr/skb/octopus/skb_query.c

index e7f4aa9..584c5c4 100644 (file)
@@ -18,7 +18,7 @@
 #ifndef OCTOPUS_DEFINITIONS_H_
 #define OCTOPUS_DEFINITIONS_H_
 
-#define MAX_QUERY_LENGTH (5*1024)
+#define MAX_QUERY_LENGTH (10*1024)
 
 
 //
index fcffbe7..ed8a9d3 100644 (file)
@@ -22,7 +22,7 @@
 #include <barrelfish/barrelfish.h>
 #include <octopus/definitions.h>
 #else
-#define MAX_QUERY_LENGTH (5*1024)
+#define MAX_QUERY_LENGTH (10*1024)
 #define SYS_ERR_OK 0
 #define OCT_ERR_PARSER_FAIL 2
 typedef long errval_t;
index 642e1b2..29e4b19 100644 (file)
@@ -23,8 +23,8 @@
 struct oct_reply_state;
 
 struct skb_writer {
-    char buffer[MAX_QUERY_LENGTH]; // TODO can be bigger than max query length...
     size_t length;
+    char buffer[MAX_QUERY_LENGTH]; // TODO can be bigger than max query length...
 };
 
 struct oct_query_state {
index 84e6b4c..504b184 100644 (file)
@@ -75,14 +75,20 @@ static errval_t transform_ec_error(int res)
 
 static void read_eclipse_queue(int qid, struct skb_writer* w)
 {
+    assert(w != NULL);
     int res = 0;
 
     do {
-        res = ec_queue_read(qid, w->buffer + w->length, BUFFER_SIZE - res);
+        res = ec_queue_read(qid, w->buffer + w->length, MAX_QUERY_LENGTH - res);
         w->length += res;
-    } while ((res != 0) && (w->length < BUFFER_SIZE));
+    } while ((res != 0) && w->length < MAX_QUERY_LENGTH);
 
-    w->buffer[w->length] = '\0';
+    if (w->length >= 0 && w->length < MAX_QUERY_LENGTH) {
+        w->buffer[w->length] = '\0';
+    }
+    else {
+        assert(!"Out of bounds, increase MAX_QUERY_LENGTH?");
+    }
 }
 
 static errval_t run_eclipse(struct oct_query_state* st)
@@ -521,7 +527,7 @@ errval_t find_subscribers(struct ast_object* ast, struct oct_query_state* sqs)
 
 errval_t set_binding(octopus_binding_type_t type, uint64_t id, void* binding)
 {
-    struct oct_query_state* dqs = malloc(sizeof(struct oct_query_state));
+    struct oct_query_state* dqs = calloc(1, sizeof(struct oct_query_state));
     if (dqs == NULL) {
         return LIB_ERR_MALLOC_FAIL;
     }