From 3681ee7dc1e9d8c94fdb046d7be0bbcfeba1cfe9 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 5 Jul 2017 11:54:45 +0200 Subject: [PATCH] agent: Use MAX_PASSPHRASE_LEN (255) also for the loopback. * agent/call-pinentry.c (agent_get_passphrase): Reduce maximum passphrase length as conveyed to the loopback to MAX_PASSPHRASE_LEN. * agent/genkey.c (agent_ask_new_passphrase): Extend the maximum passphrase as conveyed to the loopback to MAX_PASSPHRASE_LEN. -- Note that in genkey() max_length is set to MAX_PASSPHRASE_LEN + 1 because in agent_askpin() decrements that value before conveying it to the loopback. GnuPG-bug-id: 3254 Signed-off-by: Werner Koch --- agent/call-pinentry.c | 8 ++++---- agent/genkey.c | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/agent/call-pinentry.c b/agent/call-pinentry.c index 9d8e7f63e..cb7997faa 100644 --- a/agent/call-pinentry.c +++ b/agent/call-pinentry.c @@ -964,8 +964,8 @@ agent_askpin (ctrl_t ctrl, size_t size; *pininfo->pin = 0; /* Reset the PIN. */ - rc = pinentry_loopback(ctrl, "PASSPHRASE", &passphrase, &size, - pininfo->max_length - 1); + rc = pinentry_loopback (ctrl, "PASSPHRASE", &passphrase, &size, + pininfo->max_length - 1); if (rc) return rc; @@ -1192,10 +1192,10 @@ agent_get_passphrase (ctrl_t ctrl, if (ctrl->pinentry_mode == PINENTRY_MODE_LOOPBACK) { size_t size; - size_t len = ASSUAN_LINELENGTH/2; return pinentry_loopback (ctrl, "PASSPHRASE", - (unsigned char **)retpass, &size, len); + (unsigned char **)retpass, &size, + MAX_PASSPHRASE_LEN); } return gpg_error (GPG_ERR_NO_PIN_ENTRY); } diff --git a/agent/genkey.c b/agent/genkey.c index 31742a13c..a3e37ee3a 100644 --- a/agent/genkey.c +++ b/agent/genkey.c @@ -357,10 +357,10 @@ agent_ask_new_passphrase (ctrl_t ctrl, const char *prompt, if (ctrl->pinentry_mode == PINENTRY_MODE_LOOPBACK) { size_t size; - size_t len = 100; unsigned char *buffer; - err = pinentry_loopback(ctrl, "NEW_PASSPHRASE", &buffer, &size, len); + err = pinentry_loopback (ctrl, "NEW_PASSPHRASE", &buffer, &size, + MAX_PASSPHRASE_LEN); if (!err) { if (size)