logs-show: refuse data which contain invalid fields
This commit is contained in:
parent
f2bd032044
commit
805d67c565
|
@ -702,9 +702,11 @@ static int output_verbose(
|
||||||
|
|
||||||
c = memchr(data, '=', length);
|
c = memchr(data, '=', length);
|
||||||
if (!c)
|
if (!c)
|
||||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid field.");
|
||||||
"Invalid field.");
|
|
||||||
fieldlen = c - (const char*) data;
|
fieldlen = c - (const char*) data;
|
||||||
|
if (!journal_field_valid(data, fieldlen, true))
|
||||||
|
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid field.");
|
||||||
|
|
||||||
r = field_set_test(output_fields, data, fieldlen);
|
r = field_set_test(output_fields, data, fieldlen);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
@ -798,6 +800,7 @@ static int output_export(
|
||||||
sd_id128_to_string(boot_id, sid));
|
sd_id128_to_string(boot_id, sid));
|
||||||
|
|
||||||
JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
|
JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
|
||||||
|
size_t fieldlen;
|
||||||
const char *c;
|
const char *c;
|
||||||
|
|
||||||
/* We already printed the boot id from the data in the header, hence let's suppress it here */
|
/* We already printed the boot id from the data in the header, hence let's suppress it here */
|
||||||
|
@ -806,10 +809,13 @@ static int output_export(
|
||||||
|
|
||||||
c = memchr(data, '=', length);
|
c = memchr(data, '=', length);
|
||||||
if (!c)
|
if (!c)
|
||||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid field.");
|
||||||
"Invalid field.");
|
|
||||||
|
|
||||||
r = field_set_test(output_fields, data, c - (const char *) data);
|
fieldlen = c - (const char*) data;
|
||||||
|
if (!journal_field_valid(data, fieldlen, true))
|
||||||
|
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid field.");
|
||||||
|
|
||||||
|
r = field_set_test(output_fields, data, fieldlen);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
if (!r)
|
if (!r)
|
||||||
|
@ -820,11 +826,11 @@ static int output_export(
|
||||||
else {
|
else {
|
||||||
uint64_t le64;
|
uint64_t le64;
|
||||||
|
|
||||||
fwrite(data, c - (const char*) data, 1, f);
|
fwrite(data, fieldlen, 1, f);
|
||||||
fputc('\n', f);
|
fputc('\n', f);
|
||||||
le64 = htole64(length - (c - (const char*) data) - 1);
|
le64 = htole64(length - fieldlen - 1);
|
||||||
fwrite(&le64, sizeof(le64), 1, f);
|
fwrite(&le64, sizeof(le64), 1, f);
|
||||||
fwrite(c + 1, length - (c - (const char*) data) - 1, 1, f);
|
fwrite(c + 1, length - fieldlen - 1, 1, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
fputc('\n', f);
|
fputc('\n', f);
|
||||||
|
@ -961,6 +967,7 @@ static int update_json_data_split(
|
||||||
const void *data,
|
const void *data,
|
||||||
size_t size) {
|
size_t size) {
|
||||||
|
|
||||||
|
size_t fieldlen;
|
||||||
const char *eq;
|
const char *eq;
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
|
@ -974,14 +981,15 @@ static int update_json_data_split(
|
||||||
if (!eq)
|
if (!eq)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (eq == data)
|
fieldlen = eq - (const char*) data;
|
||||||
return 0;
|
if (!journal_field_valid(data, fieldlen, true))
|
||||||
|
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid field.");
|
||||||
|
|
||||||
name = strndupa(data, eq - (const char*) data);
|
name = strndupa(data, fieldlen);
|
||||||
if (output_fields && !set_contains(output_fields, name))
|
if (output_fields && !set_contains(output_fields, name))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return update_json_data(h, flags, name, eq + 1, size - (eq - (const char*) data) - 1);
|
return update_json_data(h, flags, name, eq + 1, size - fieldlen - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int output_json(
|
static int output_json(
|
||||||
|
|
Loading…
Reference in New Issue