datajson: use systematic allocation

pull/13432/head
Eric Leblond 11 months ago committed by Victor Julien
parent d84d7431e4
commit cfa7a747c2

@ -51,6 +51,17 @@ void DatajsonUnlockElt(DataJsonResultType *r)
}
}
int DatajsonCopyJson(DataJsonType *dst, DataJsonType *src)
{
dst->len = src->len;
dst->value = SCMalloc(dst->len + 1);
if (dst->value == NULL)
return -1;
memcpy(dst->value, src->value, dst->len);
dst->value[dst->len] = '\0'; // Ensure null-termination
return 0;
}
/* return true if number is a float or an integer */
static bool IsFloat(const char *in, size_t ins)
{
@ -281,16 +292,9 @@ static int DatajsonAdd(
break;
}
if (add_ret == 1) {
/* data was added to the hash, we take ownership */
json->value = NULL;
return 1;
}
SCFree(json->value);
json->value = NULL;
if (json->value != NULL) {
SCFree(json->value);
json->value = NULL;
}
return add_ret;
}

@ -52,4 +52,6 @@ int DatajsonAddSerialized(Dataset *set, const char *value, const char *json);
void DatajsonUnlockElt(DataJsonResultType *r);
int DatajsonCopyJson(DataJsonType *dst, DataJsonType *src);
#endif /* SURICATA_DATAJSON_H*/

@ -43,8 +43,9 @@ int IPv4JsonSet(void *dst, void *src)
IPv4Type *src_s = src;
IPv4Type *dst_s = dst;
memcpy(dst_s->ipv4, src_s->ipv4, sizeof(dst_s->ipv4));
dst_s->json.value = src_s->json.value;
dst_s->json.len = src_s->json.len;
if (DatajsonCopyJson(&dst_s->json, &src_s->json) < 0)
return -1;
return 0;
}

@ -44,8 +44,9 @@ int IPv6JsonSet(void *dst, void *src)
IPv6Type *src_s = src;
IPv6Type *dst_s = dst;
memcpy(dst_s->ipv6, src_s->ipv6, sizeof(dst_s->ipv6));
dst_s->json.value = src_s->json.value;
dst_s->json.len = src_s->json.len;
if (DatajsonCopyJson(&dst_s->json, &src_s->json) < 0)
return -1;
return 0;
}

@ -45,8 +45,10 @@ int Md5StrJsonSet(void *dst, void *src)
Md5Type *src_s = src;
Md5Type *dst_s = dst;
memcpy(dst_s->md5, src_s->md5, sizeof(dst_s->md5));
dst_s->json.value = src_s->json.value;
dst_s->json.len = src_s->json.len;
if (DatajsonCopyJson(&dst_s->json, &src_s->json) < 0)
return -1;
return 0;
}

@ -43,8 +43,10 @@ int Sha256StrJsonSet(void *dst, void *src)
Sha256Type *src_s = src;
Sha256Type *dst_s = dst;
memcpy(dst_s->sha256, src_s->sha256, sizeof(dst_s->sha256));
dst_s->json.value = src_s->json.value;
dst_s->json.len = src_s->json.len;
if (DatajsonCopyJson(&dst_s->json, &src_s->json) < 0)
return -1;
return 0;
}

@ -84,8 +84,10 @@ int StringJsonSet(void *dst, void *src)
BUG_ON(dst_s->ptr == NULL);
memcpy(dst_s->ptr, src_s->ptr, dst_s->len);
dst_s->json.value = src_s->json.value;
dst_s->json.len = src_s->json.len;
if (DatajsonCopyJson(&dst_s->json, &src_s->json) < 0) {
SCFree(dst_s->ptr);
return -1;
}
SCLogDebug("dst %p src %p, dst_s->ptr %p dst_s->len %u", dst, src, dst_s->ptr, dst_s->len);
return 0;

Loading…
Cancel
Save