datajson: more explicit memory handling

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

@ -282,6 +282,8 @@ static int DatajsonAdd(
}
if (add_ret == 1) {
/* data was added to the hash, we take ownership */
json->value = NULL;
return 1;
}
@ -895,6 +897,7 @@ int DatajsonAddSerialized(Dataset *set, const char *value, const char *json)
}
}
int ret = -1;
switch (set->type) {
case DATASET_TYPE_STRING: {
uint32_t decoded_size = SCBase64DecodeBufferSize(strlen(value));
@ -903,7 +906,8 @@ int DatajsonAddSerialized(Dataset *set, const char *value, const char *json)
(const uint8_t *)value, strlen(value), SCBase64ModeStrict, decoded);
if (num_decoded == 0)
goto operror;
return DatajsonAdd(set, decoded, num_decoded, &jvalue);
ret = DatajsonAdd(set, decoded, num_decoded, &jvalue);
break;
}
case DATASET_TYPE_MD5: {
if (strlen(value) != SC_MD5_HEX_LEN)
@ -911,7 +915,8 @@ int DatajsonAddSerialized(Dataset *set, const char *value, const char *json)
uint8_t hash[SC_MD5_LEN];
if (HexToRaw((const uint8_t *)value, SC_MD5_HEX_LEN, hash, sizeof(hash)) < 0)
goto operror;
return DatajsonAdd(set, hash, SC_MD5_LEN, &jvalue);
ret = DatajsonAdd(set, hash, SC_MD5_LEN, &jvalue);
break;
}
case DATASET_TYPE_SHA256: {
if (strlen(value) != SC_SHA256_HEX_LEN)
@ -919,13 +924,15 @@ int DatajsonAddSerialized(Dataset *set, const char *value, const char *json)
uint8_t hash[SC_SHA256_LEN];
if (HexToRaw((const uint8_t *)value, SC_SHA256_HEX_LEN, hash, sizeof(hash)) < 0)
goto operror;
return DatajsonAdd(set, hash, SC_SHA256_LEN, &jvalue);
ret = DatajsonAdd(set, hash, SC_SHA256_LEN, &jvalue);
break;
}
case DATASET_TYPE_IPV4: {
struct in_addr in;
if (inet_pton(AF_INET, value, &in) != 1)
goto operror;
return DatajsonAdd(set, (uint8_t *)&in.s_addr, SC_IPV4_LEN, &jvalue);
ret = DatajsonAdd(set, (uint8_t *)&in.s_addr, SC_IPV4_LEN, &jvalue);
break;
}
case DATASET_TYPE_IPV6: {
struct in6_addr in6;
@ -933,11 +940,12 @@ int DatajsonAddSerialized(Dataset *set, const char *value, const char *json)
SCLogError("Dataset failed to import %s as IPv6", value);
goto operror;
}
return DatajsonAdd(set, (uint8_t *)&in6.s6_addr, SC_IPV6_LEN, &jvalue);
ret = DatajsonAdd(set, (uint8_t *)&in6.s6_addr, SC_IPV6_LEN, &jvalue);
break;
}
}
SCFree(jvalue.value);
return -1;
return ret;
operror:
SCFree(jvalue.value);
return -2;

Loading…
Cancel
Save