journal: properly handle an unexpectedly missing field

parse_field() checks if the field has the expected format, and returns
0 if it doesn't. In that case, value and size are not
set. Nevertheless, we would try to continue, and hit an assert in
safe_atou64. This case shouldn't happen, unless sd_j_get_data is borked,
so cleanly assert that we got the expected field.

Also, oom is the only way that parse_field can fail, which we log
already. Instead of outputting a debug statement and carrying on,
treat oom as fatal.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2015-12-13 14:54:47 -05:00
parent c9811ac800
commit e64c53fd05
+2 -1
View File
@@ -435,8 +435,9 @@ static int output_verbose(
r = parse_field(data, length, "_SOURCE_REALTIME_TIMESTAMP=", &value, &size);
if (r < 0)
log_debug_errno(r, "_SOURCE_REALTIME_TIMESTAMP invalid: %m");
return r;
else {
assert(r > 0);
r = safe_atou64(value, &realtime);
if (r < 0)
log_debug_errno(r, "Failed to parse realtime timestamp: %m");