decode: use pointer for PacketContextData

By adding a pointer instead of the structure in the alert info
we spare some memory.
pull/13432/head
Eric Leblond 1 year ago committed by Victor Julien
parent 92f4b36e72
commit be9e13c6b1

@ -149,16 +149,13 @@ void PacketAlertRecycle(PacketAlert *pa_array)
{
if (pa_array != NULL) {
for (int i = 0; i < packet_alert_max; i++) {
if (pa_array[i].json_info.next != NULL) {
struct PacketContextData *current_json = pa_array[i].json_info.next;
while (current_json) {
struct PacketContextData *next_json = current_json->next;
SCFree(current_json);
current_json = next_json;
}
struct PacketContextData *current_json = pa_array[i].json_info;
while (current_json) {
struct PacketContextData *next_json = current_json->next;
SCFree(current_json);
current_json = next_json;
}
pa_array[i].json_info.json_string = NULL;
pa_array[i].json_info.next = NULL;
pa_array[i].json_info = NULL;
}
}
}
@ -167,14 +164,11 @@ void PacketAlertFree(PacketAlert *pa)
{
if (pa != NULL) {
for (int i = 0; i < packet_alert_max; i++) {
/* first item is not allocated so start at second one */
if (pa[i].json_info.next != NULL) {
struct PacketContextData *allocated_json = pa[i].json_info.next;
while (allocated_json) {
struct PacketContextData *next_json = allocated_json->next;
SCFree(allocated_json);
allocated_json = next_json;
}
struct PacketContextData *allocated_json = pa[i].json_info;
while (allocated_json) {
struct PacketContextData *next_json = allocated_json->next;
SCFree(allocated_json);
allocated_json = next_json;
}
}
SCFree(pa);

@ -252,7 +252,7 @@ typedef struct PacketAlert_ {
const struct Signature_ *s;
uint64_t tx_id; /* Used for sorting */
int64_t frame_id;
struct PacketContextData json_info;
struct PacketContextData *json_info;
} PacketAlert;
/**

@ -297,12 +297,19 @@ static inline PacketAlert PacketAlertSet(
/* Set tx_id if the frame has it */
pa.tx_id = tx_id;
pa.frame_id = (alert_flags & PACKET_ALERT_FLAG_FRAME) ? det_ctx->frame_id : 0;
pa.json_info.json_string = NULL;
pa.json_info.next = NULL;
pa.json_info = NULL;
if (det_ctx->json_content_len) {
/* We have some JSON attached in the current detection so let's try
to see if some need to be used for current signature. */
struct PacketContextData *current_json = &pa.json_info;
struct PacketContextData *current_json = pa.json_info;
if (current_json == NULL) {
current_json = SCCalloc(1, sizeof(struct PacketContextData));
if (current_json == NULL) {
/* Allocation error, let's return now */
return pa;
}
pa.json_info = current_json;
}
for (size_t i = 0; i < det_ctx->json_content_len; i++) {
if (s == det_ctx->json_content[i].id) {
if (current_json->json_string != NULL) {

@ -253,9 +253,9 @@ void AlertJsonHeader(const Packet *p, const PacketAlert *pa, SCJsonBuilder *js,
AlertJsonMetadata(pa, js);
}
if (pa->json_info.json_string != NULL) {
if (pa->json_info != NULL) {
SCJbOpenObject(js, "context");
const struct PacketContextData *json_info = &pa->json_info;
const struct PacketContextData *json_info = pa->json_info;
while (json_info) {
SCJbSetFormatted(js, json_info->json_string);
json_info = json_info->next;

Loading…
Cancel
Save