mod_graylog2: additional input checks on LOG_FIELDS[]

This commit is contained in:
Chris Rienzo 2014-07-11 10:38:29 -04:00
parent 0b6f10a6a8
commit eae1c4477a

View File

@ -116,23 +116,25 @@ static char *to_gelf(const switch_log_node_t *node, switch_log_level_t log_level
if (*full_message == '\n') { if (*full_message == '\n') {
full_message++; full_message++;
} }
/* parse list of fields, if any */ /* parse list of fields, if any */
if (strncmp(full_message, "LOG_FIELDS", 10) == 0) { if (strncmp(full_message, "LOG_FIELDS", 10) == 0) {
if (switch_event_create_brackets(full_message+10, '[', ']', ',', &log_fields, &parsed_full_message, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) { if (switch_event_create_brackets(full_message+10, '[', ']', ',', &log_fields, &parsed_full_message, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) {
switch_event_header_t *hp; switch_event_header_t *hp;
for (hp = log_fields->headers; hp; hp = hp->next) { for (hp = log_fields->headers; hp; hp = hp->next) {
if (strncmp(hp->name, "@#", 2) == 0) { if (!zstr(hp->name) && !zstr(hp->value)) {
field_name = switch_mprintf("_%s", hp->name + 2); if (strncmp(hp->name, "@#", 2) == 0) {
cJSON_AddItemToObject(gelf, field_name, cJSON_CreateNumber(strtod(hp->value, NULL))); field_name = switch_mprintf("_%s", hp->name + 2);
} else { cJSON_AddItemToObject(gelf, field_name, cJSON_CreateNumber(strtod(hp->value, NULL)));
field_name = switch_mprintf("_%s", hp->name); } else {
cJSON_AddItemToObject(gelf, field_name, cJSON_CreateString(hp->value)); field_name = switch_mprintf("_%s", hp->name);
cJSON_AddItemToObject(gelf, field_name, cJSON_CreateString(hp->value));
}
free(field_name);
} }
free(field_name);
} }
switch_event_destroy(&log_fields); switch_event_destroy(&log_fields);
full_message = parsed_full_message; full_message = parsed_full_message;
} }
@ -149,9 +151,7 @@ static char *to_gelf(const switch_log_node_t *node, switch_log_level_t log_level
gelf_text = cJSON_PrintUnformatted(gelf); gelf_text = cJSON_PrintUnformatted(gelf);
cJSON_Delete(gelf); cJSON_Delete(gelf);
if (parsed_full_message != NULL) { switch_safe_free(parsed_full_message);
free(parsed_full_message);
}
return gelf_text; return gelf_text;
} }