[gmime] Check gpgme_add_signers() for errors



commit 29f9f8862b951b5bd310b327a0f078e93a6c6154
Author: Jeffrey Stedfast <fejj gnome org>
Date:   Sun Feb 26 08:20:17 2017 -0500

    Check gpgme_add_signers() for errors

 gmime/gmime-gpg-context.c   |   14 ++++++++++----
 gmime/gmime-pkcs7-context.c |   14 +++++++++-----
 2 files changed, 19 insertions(+), 9 deletions(-)
---
diff --git a/gmime/gmime-gpg-context.c b/gmime/gmime-gpg-context.c
index d12bd97..b6e5718 100644
--- a/gmime/gmime-gpg-context.c
+++ b/gmime/gmime-gpg-context.c
@@ -430,15 +430,19 @@ static gboolean
 gpg_add_signer (GMimeGpgContext *gpg, const char *signer, GError **err)
 {
        gpgme_key_t key = NULL;
+       gpgme_error_t error;
        
        if (!(key = gpg_get_key_by_name (gpg, signer, TRUE, err)))
                return FALSE;
        
-       /* set the key (the previous operation guaranteed that it exists, no need
-        * 2 check return values...) */
-       gpgme_signers_add (gpg->ctx, key);
+       error = gpgme_signers_add (gpg->ctx, key);
        gpgme_key_unref (key);
        
+       if (error != GPG_ERR_NO_ERROR) {
+               g_set_error (err, GMIME_GPGME_ERROR, error, _("Failed to add signer \"%s\": %s"), signer, 
gpgme_strerror (error));
+               return FALSE;
+       }
+       
        return TRUE;
 }
 #endif /* ENABLE_CRYPTO */
@@ -448,7 +452,7 @@ gpg_sign (GMimeCryptoContext *context, gboolean detach, const char *userid, GMim
          GMimeStream *istream, GMimeStream *ostream, GError **err)
 {
 #ifdef ENABLE_CRYPTO
-       gpgme_sig_mode_t mode = detach ? GPGME_SIG_MODE_DETACH : GPGME_SIG_MODE_NORMAL;
+       gpgme_sig_mode_t mode = detach ? GPGME_SIG_MODE_DETACH : GPGME_SIG_MODE_CLEAR;
        GMimeGpgContext *gpg = (GMimeGpgContext *) context;
        gpgme_sign_result_t result;
        gpgme_data_t input, output;
@@ -470,6 +474,8 @@ gpg_sign (GMimeCryptoContext *context, gboolean detach, const char *userid, GMim
                return -1;
        }
        
+       gpgme_set_textmode (gpg->ctx, !detach);
+       
        /* sign the input stream */
        if ((error = gpgme_op_sign (gpg->ctx, input, output, mode)) != GPG_ERR_NO_ERROR) {
                g_set_error (err, GMIME_GPGME_ERROR, error, _("Signing failed: %s"), gpgme_strerror (error));
diff --git a/gmime/gmime-pkcs7-context.c b/gmime/gmime-pkcs7-context.c
index f918ed4..6b45d98 100644
--- a/gmime/gmime-pkcs7-context.c
+++ b/gmime/gmime-pkcs7-context.c
@@ -426,15 +426,19 @@ static gboolean
 pkcs7_add_signer (GMimePkcs7Context *pkcs7, const char *signer, GError **err)
 {
        gpgme_key_t key = NULL;
+       gpgme_error_t error;
        
        if (!(key = pkcs7_get_key_by_name (pkcs7, signer, TRUE, err)))
                return FALSE;
        
-       /* set the key (the previous operation guaranteed that it exists, no need
-        * 2 check return values...) */
-       gpgme_signers_add (pkcs7->ctx, key);
+       error = gpgme_signers_add (pkcs7->ctx, key);
        gpgme_key_unref (key);
        
+       if (error != GPG_ERR_NO_ERROR) {
+               g_set_error (err, GMIME_GPGME_ERROR, error, _("Failed to add signer \"%s\": %s"), signer, 
gpgme_strerror (error));
+               return FALSE;
+       }
+       
        return TRUE;
 }
 #endif /* ENABLE_CRYPTO */
@@ -453,8 +457,6 @@ pkcs7_sign (GMimeCryptoContext *context, gboolean detach, const char *userid, GM
        if (!pkcs7_add_signer (pkcs7, userid, err))
                return -1;
        
-       gpgme_set_armor (pkcs7->ctx, FALSE);
-       
        if ((error = gpgme_data_new_from_cbs (&input, &pkcs7_stream_funcs, istream)) != GPG_ERR_NO_ERROR) {
                g_set_error (err, GMIME_GPGME_ERROR, error, _("Could not open input stream: %s"), 
gpgme_strerror (error));
                return -1;
@@ -921,6 +923,8 @@ g_mime_pkcs7_context_new (void)
        pkcs7 = g_object_newv (GMIME_TYPE_PKCS7_CONTEXT, 0, NULL);
        gpgme_set_passphrase_cb (ctx, pkcs7_passphrase_cb, pkcs7);
        gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
+       gpgme_set_textmode (ctx, FALSE);
+       gpgme_set_armor (ctx, FALSE);
        pkcs7->ctx = ctx;
        
        return (GMimeCryptoContext *) pkcs7;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]