From: Zbigniew Jędrzejewski-Szmek Date: Thu, 10 Dec 2015 02:35:49 +0000 (-0500) Subject: journal: properly handle an unexpectedly missing field X-Git-Tag: v229~195^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e64c53fd05496fd9683db8f5130826ad1c6c515d;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index 193dad19437..a1f65d1a888 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -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");