From fa83724187753fab9fbc846488fce01958317ae8 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 30 Nov 2015 11:26:55 -0500 Subject: [PATCH] status: Fix some crashes Encountered a couple crash scenarios: 1) A commit with an invalid timestamp trips an assertion. Instead show the timestamp as "invalid". 2) If a deployed commit is unsigned, the daemon will not include a "signatures" array in the deployment's GVariant representation. The logic for --pretty was assuming the "signatures" array is always present. --- src/app/rpmostree-builtin-status.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/app/rpmostree-builtin-status.c b/src/app/rpmostree-builtin-status.c index ca552b8a..e0552601 100644 --- a/src/app/rpmostree-builtin-status.c +++ b/src/app/rpmostree-builtin-status.c @@ -157,7 +157,7 @@ rpmostree_builtin_status (int argc, for (i = 0; i < n; i++) { GVariantDict *dict; - GDateTime *timestamp = NULL; + g_autoptr(GDateTime) timestamp = NULL; g_autofree char *timestamp_string = NULL; g_autofree gchar *truncated_csum = NULL; g_autoptr(GVariant) signatures = NULL; @@ -168,7 +168,7 @@ rpmostree_builtin_status (int argc, gchar *version_string = NULL; /* borrowed */ gchar *checksum = NULL; /* borrowed */ - gint64 t; + guint64 t = 0; gint serial; gboolean is_booted = FALSE; @@ -187,9 +187,10 @@ rpmostree_builtin_status (int argc, is_booted = g_strcmp0 (booted_id, id) == 0; timestamp = g_date_time_new_from_unix_utc (t); - g_assert (timestamp); - timestamp_string = g_date_time_format (timestamp, "%Y-%m-%d %T"); - g_date_time_unref (timestamp); + if (timestamp != NULL) + timestamp_string = g_date_time_format (timestamp, "%Y-%m-%d %T"); + else + timestamp_string = g_strdup_printf ("(invalid)"); /* truncate checksum */ truncated_csum = g_strndup (checksum, CSUM_DISP_LEN); @@ -213,7 +214,6 @@ rpmostree_builtin_status (int argc, /* print "pretty" row info */ else { - guint n_sigs; guint tab = 11; char *title = NULL; if (i==0) @@ -236,9 +236,8 @@ rpmostree_builtin_status (int argc, tab, "osname", tab, os_name, tab, "refspec", tab, origin_refspec); - n_sigs = g_variant_n_children (signatures); - if (n_sigs > 0) - rpmostree_print_signatures (signatures, " GPG: "); + if (signatures != NULL) + rpmostree_print_signatures (signatures, " GPG: "); printchar ("=", 60); }