{
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;
}
}
}
{
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);
const struct Signature_ *s;
uint64_t tx_id; /* Used for sorting */
int64_t frame_id;
- struct PacketContextData json_info;
+ struct PacketContextData *json_info;
} PacketAlert;
/**
/* 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) {
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;