changeset 2202:ff18feb75a6d

PGP: Add a trailing NULL after a message is PGP-encrypted This patch fixes another issue reported in #134.
author Mikael Berthe <mikael@lilotux.net>
date Mon, 12 Oct 2015 11:41:34 +0200
parents 1c8ca1a8e5fe
children 170597f5365b
files mcabber/mcabber/pgp.c
diffstat 1 files changed, 16 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/mcabber/pgp.c	Sun Oct 11 17:23:45 2015 +0200
+++ b/mcabber/mcabber/pgp.c	Mon Oct 12 11:41:34 2015 +0200
@@ -344,7 +344,9 @@
     err = gpgme_data_new(&out);
     if (!err) {
       err = gpgme_op_sign(ctx, in, out, GPGME_SIG_MODE_DETACH);
-      if (!err) {
+      if (err) {
+        gpgme_data_release(out);
+      } else {
         signed_data = gpgme_data_release_and_get_mem(out, &nread);
         if (signed_data) {
           // We need to add a trailing NULL
@@ -353,8 +355,6 @@
           signed_data = strip_header_footer(dd);
           g_free(dd);
         }
-      } else {
-        gpgme_data_release(out);
       }
     }
     gpgme_data_release(in);
@@ -410,7 +410,9 @@
     err = gpgme_data_new(&out);
     if (!err) {
       err = gpgme_op_decrypt(ctx, in, out);
-      if (!err) {
+      if (err) {
+        gpgme_data_release(out);
+      } else {
         decrypted_data = gpgme_data_release_and_get_mem(out, &nread);
         if (decrypted_data) {
           // We need to add a trailing NULL
@@ -418,8 +420,6 @@
           free(decrypted_data);
           decrypted_data = dd;
         }
-      } else {
-        gpgme_data_release(out);
       }
     }
     gpgme_data_release(in);
@@ -487,10 +487,17 @@
       err = gpgme_data_new(&out);
       if (!err) {
         err = gpgme_op_encrypt(ctx, keys, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
-        if (!err)
+        if (err) {
+          gpgme_data_release(out);
+        } else {
           encrypted_data = gpgme_data_release_and_get_mem(out, &nread);
-        else
-          gpgme_data_release(out);
+          if (encrypted_data) {
+            // We need to add a trailing NULL
+            char *dd = g_strndup(encrypted_data, nread);
+            free(encrypted_data);
+            encrypted_data = dd;
+          }
+        }
       }
       gpgme_data_release(in);
     }