aboutsummaryrefslogtreecommitdiff
path: root/gpg-interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpg-interface.c')
-rw-r--r--gpg-interface.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/gpg-interface.c b/gpg-interface.c
index 37162c9a43..131e7d529e 100644
--- a/gpg-interface.c
+++ b/gpg-interface.c
@@ -156,21 +156,33 @@ static void parse_gpg_output(struct signature_check *sigc)
}
/* Do we have fingerprint? */
if (sigcheck_gpg_status[i].flags & GPG_STATUS_FINGERPRINT) {
+ const char *limit;
+ char **field;
+
next = strchrnul(line, ' ');
replace_cstring(&sigc->fingerprint, line, next);
- /* Skip interim fields */
+ /*
+ * Skip interim fields. The search is
+ * limited to the same line since only
+ * OpenPGP signatures has a field with
+ * the primary fingerprint.
+ */
+ limit = strchrnul(line, '\n');
for (j = 9; j > 0; j--) {
- if (!*next)
+ if (!*next || limit <= next)
break;
line = next + 1;
next = strchrnul(line, ' ');
}
- next = strchrnul(line, '\n');
- free(sigc->primary_key_fingerprint);
- replace_cstring(&sigc->primary_key_fingerprint,
- line, next);
+ field = &sigc->primary_key_fingerprint;
+ if (!j) {
+ next = strchrnul(line, '\n');
+ replace_cstring(field, line, next);
+ } else {
+ replace_cstring(field, NULL, NULL);
+ }
}
break;