Fix a memory access and a double slash bug.
[gpgme.git] / src / encrypt.c
index 4744090..792c25c 100644 (file)
@@ -3,17 +3,17 @@
    Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
 
    This file is part of GPGME.
+
    GPGME is free software; you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as
    published by the Free Software Foundation; either version 2.1 of
    the License, or (at your option) any later version.
-   
+
    GPGME is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
-   
+
    You should have received a copy of the GNU Lesser General Public
    License along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
@@ -27,6 +27,7 @@
 #include <errno.h>
 
 #include "gpgme.h"
+#include "debug.h"
 #include "context.h"
 #include "ops.h"
 
@@ -66,12 +67,33 @@ gpgme_op_encrypt_result (gpgme_ctx_t ctx)
   op_data_t opd;
   gpgme_error_t err;
 
+  TRACE_BEG (DEBUG_CTX, "gpgme_op_encrypt_result", ctx);
+
   err = _gpgme_op_data_lookup (ctx, OPDATA_ENCRYPT, &hook, -1, NULL);
   opd = hook;
 
   if (err || !opd)
-    return NULL;
+    {
+      TRACE_SUC0 ("result=(null)");
+      return NULL;
+    }
 
+  if (_gpgme_debug_trace ())
+    {
+      gpgme_invalid_key_t invkeys = opd->result.invalid_recipients;
+      int i = 0;
+
+      while (invkeys)
+       {
+         TRACE_LOG3 ("invalid_recipients[%i] = %s (%s)",
+                     i, invkeys->fpr ? invkeys->fpr : "(null)",
+                     gpg_strerror (invkeys->reason));
+         invkeys = invkeys->next;
+         i++;
+       }
+    }
+
+  TRACE_SUC1 ("result=%p", &opd->result);
   return &opd->result;
 }
 
@@ -205,7 +227,29 @@ gpgme_op_encrypt_start (gpgme_ctx_t ctx, gpgme_key_t recp[],
                        gpgme_encrypt_flags_t flags,
                        gpgme_data_t plain, gpgme_data_t cipher)
 {
-  return encrypt_start (ctx, 0, recp, flags, plain, cipher);
+  gpgme_error_t err;
+
+  TRACE_BEG3 (DEBUG_CTX, "gpgme_op_encrypt_start", ctx,
+             "flags=0x%x, plain=%p, cipher=%p", flags, plain, cipher);
+
+  if (!ctx)
+    return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
+
+  if (_gpgme_debug_trace () && recp)
+    {
+      int i = 0;
+
+      while (recp[i])
+       {
+         TRACE_LOG3 ("recipient[%i] = %p (%s)", i, recp[i],
+                     (recp[i]->subkeys && recp[i]->subkeys->fpr) ?
+                     recp[i]->subkeys->fpr : "invalid");
+         i++;
+       }
+    }
+
+  err = encrypt_start (ctx, 0, recp, flags, plain, cipher);
+  return TRACE_ERR (err);
 }
 
 
@@ -216,8 +260,29 @@ gpgme_op_encrypt (gpgme_ctx_t ctx, gpgme_key_t recp[],
                  gpgme_encrypt_flags_t flags,
                  gpgme_data_t plain, gpgme_data_t cipher)
 {
-  gpgme_error_t err = encrypt_start (ctx, 1, recp, flags, plain, cipher);
+  gpgme_error_t err;
+
+  TRACE_BEG3 (DEBUG_CTX, "gpgme_op_encrypt", ctx,
+             "flags=0x%x, plain=%p, cipher=%p", flags, plain, cipher);
+
+  if (!ctx)
+    return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
+
+  if (_gpgme_debug_trace () && recp)
+    {
+      int i = 0;
+
+      while (recp[i])
+       {
+         TRACE_LOG3 ("recipient[%i] = %p (%s)", i, recp[i],
+                     (recp[i]->subkeys && recp[i]->subkeys->fpr) ?
+                     recp[i]->subkeys->fpr : "invalid");
+         i++;
+       }
+    }
+
+  err = encrypt_start (ctx, 1, recp, flags, plain, cipher);
   if (!err)
     err = _gpgme_wait_one (ctx);
-  return err;
+  return TRACE_ERR (err);
 }