|
@@ -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);
|