aboutsummaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/net')
-rw-r--r--src/net/util.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/net/util.c b/src/net/util.c
index 10a58fa..b54c253 100644
--- a/src/net/util.c
+++ b/src/net/util.c
@@ -114,6 +114,7 @@ int parse_header(char* buffer, int header_eof, parray_t** _table){
str* current = str_init("");
int oi = 0;
int item = 0;
+
for(; oi != header_eof; oi++){
if(buffer[oi] == ' ' || buffer[oi] == '\n'){
if(buffer[oi] == '\n') current->c[current->len - 1] = 0;
@@ -133,6 +134,7 @@ int parse_header(char* buffer, int header_eof, parray_t** _table){
}
if(item != 3){
+ str_free(current);
*_table = table;
return -1;
}
@@ -148,6 +150,10 @@ int parse_header(char* buffer, int header_eof, parray_t** _table){
key = 0;
} else {
if(buffer[oi] == '\n') current->c[current->len - 1] = 0;
+ //duplicate keys would cause memory leaks, ignore them for now
+ //todo: figure out system to handle this
+ str* id = (str*)parray_get(table, sw->c);
+ if(id != NULL) str_free(id);
parray_set(table, sw->c, (void*)str_init(current->c));
str_clear(current);
str_free(sw);