Quellcode durchsuchen

:bug: Debug JSONEncoder

Arthur Brandao vor 6 Jahren
Ursprung
Commit
d1d2cc121e
1 geänderte Dateien mit 21 neuen und 14 gelöschten Zeilen
  1. 21 14
      Serveur/json_encoder.c

+ 21 - 14
Serveur/json_encoder.c

@@ -21,9 +21,10 @@ void add_node(JsonEncoder* this, char* str){
     JsonNode* node;
     node = malloc(sizeof(JsonNode));
     //Allocation node
-    node->str = malloc(strlen(str) * sizeof(char));
-    //Initialisation node
-    strcpy(node->str, str);
+    int length = strlen(str) + 1;
+    node->str = malloc(length * sizeof(char));
+    memset(node->str, 0, length);
+    strncpy(node->str, str, length - 1);
     //Si 1er node
     if(this->head == NULL){
         this->head = node;
@@ -61,8 +62,9 @@ void add_value(JsonEncoder* this, char* str){
 
 void add_string(JsonEncoder* this, char* key, char* val){
     //Creation chaine
-    char* str;
-    str = malloc((strlen(key) + strlen(val) + 4 + 2 + 1) * sizeof(char)); //clef + val + 4 guillemet + ": " + \0
+    int length = strlen(key) + strlen(val) + 4 + 2 + 1; //clef + val + 4 guillemet + ": " + \0
+    char* str = malloc(length * sizeof(char)); 
+    memset(str, 0, length);
     sprintf(str, "\"%s\": \"%s\"", key, val);
     //Ajout
     add_value(this, str);
@@ -74,8 +76,9 @@ void add_number(JsonEncoder* this, char* key, double val, int ndigit){
     char nombre[20];
     ftoa(val, nombre, ndigit);
     //Creation chaine
-    char* str;
-    str = malloc((strlen(key) + strlen(nombre) + 2 + 2 + 1) * sizeof(char)); //clef + val + 2 guillemets + ": " + \0
+    int length = strlen(key) + strlen(nombre) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
+    char* str = malloc(length * sizeof(char));
+    memset(str, 0, length);
     sprintf(str, "\"%s\": %s", key, nombre);
     //Ajout
     add_value(this, str);
@@ -84,8 +87,9 @@ void add_number(JsonEncoder* this, char* key, double val, int ndigit){
 
 void add_integer(JsonEncoder* this, char* key, int val){
     //Creation chaine
-    char* str;
-    str = malloc((strlen(key) + ceil(val/10.0) + 2 + 2 + 1) * sizeof(char)); //clef + val + 2 guillemets + ": " + \0
+    int length = strlen(key) + ceil(val/10.0) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
+    char* str = malloc(length * sizeof(char)); 
+    memset(str, 0, length);
     sprintf(str, "\"%s\": %d", key, val);
     //Ajout
     add_value(this, str);
@@ -101,8 +105,9 @@ void add_boolean(JsonEncoder* this, char* key, boolean val){
         strcpy(bool, "false");
     }
     //Creation chaine
-    char* str;
-    str = malloc((strlen(key) + strlen(bool) + 2 + 2 + 1) * sizeof(char)); //clef + val + 2 guillemets + ": " + \0
+    int length = strlen(key) + strlen(bool) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
+    char* str = malloc(length * sizeof(char));
+    memset(str, 0, length);
     sprintf(str, "\"%s\": %s", key, bool);
     //Ajout
     add_value(this, str);
@@ -118,8 +123,9 @@ void add_object(JsonEncoder* this, char* key, JsonEncoder val){
     char* json;
     json = json_encode(&val);
     //Creation chaine
-    char* str;
-    str = malloc((strlen(key) + strlen(json) + 2 + 2 + 1) * sizeof(char)); //clef + val + 2 guillemets + ": " + \0
+    int length = strlen(key) + strlen(json) + 2 + 2 + 1; //clef + val + 2 guillemets + ": " + \0
+    char* str = malloc(length * sizeof(char));
+    memset(str, 0, length);
     sprintf(str, "\"%s\": %s", key, json);
     //Ajout
     add_value(this, str);
@@ -132,6 +138,7 @@ char* json_encode(JsonEncoder* this){
     //Allocation chaine
     char* str;
     str = malloc((this->length + 2) * sizeof(char)); // La chaine + {}
+    memset(str, 0, this->length + 2);
     //Creation de la chaine
     JsonNode* node;
     node = this->head;
@@ -142,7 +149,7 @@ char* json_encode(JsonEncoder* this){
             first = false;
         } else {
             sprintf(str, "%s, %s", str, node->str);
-        }    
+        }
         node = node->next;
     }
     sprintf(str, "%s}", str);