[git] GPGME - branch, master, updated. gpgme-1.8.0-93-gd2240a2

by Werner Koch cvs at cvs.gnupg.org
Thu Mar 9 11:50:08 CET 2017


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG Made Easy".

The branch, master has been updated
       via  d2240a2a1819874929bdab820bcbd3bee7f94407 (commit)
      from  41398779abbcb1ec2d7491e141469a752fc706ff (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit d2240a2a1819874929bdab820bcbd3bee7f94407
Author: Werner Koch <wk at gnupg.org>
Date:   Thu Mar 9 11:45:00 2017 +0100

    core: Fix status error return for gpgsm.
    
    * src/engine-gpgsm.c (gpgsm_assuan_simple_command): Make sure CB_ERR
    is returned.
    * src/import.c (parse_import_res): Do not return an error for the last
    field.
    (import_status_handler): Actually return the error from
    parse_import_res.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c
index 20bd88f..d5d2901 100644
--- a/src/engine-gpgsm.c
+++ b/src/engine-gpgsm.c
@@ -593,7 +593,7 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd,
     {
       err = assuan_read_line (ctx, &line, &linelen);
       if (err)
-	return err;
+	break;
 
       if (*line == '#' || !linelen)
 	continue;
@@ -601,7 +601,7 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd,
       if (linelen >= 2
 	  && line[0] == 'O' && line[1] == 'K'
 	  && (line[2] == '\0' || line[2] == ' '))
-	return cb_err;
+	break;
       else if (linelen >= 4
 	  && line[0] == 'E' && line[1] == 'R' && line[2] == 'R'
 	  && line[3] == ' ')
@@ -610,6 +610,7 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd,
              more related to gpgme and thus probably more important
              than the error returned by the engine.  */
           err = cb_err? cb_err : atoi (&line[4]);
+          cb_err = 0;
         }
       else if (linelen >= 2
 	       && line[0] == 'S' && line[1] == ' ')
@@ -646,10 +647,16 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd,
              to stop.  As with ERR we prefer a status callback
              generated error code, though.  */
           err = cb_err ? cb_err : gpg_error (GPG_ERR_GENERAL);
+          cb_err = 0;
         }
     }
   while (!err);
 
+  /* We only want the first error from the status handler, thus we
+   * take the one saved in CB_ERR. */
+  if (!err && cb_err)
+    err = cb_err;
+
   return err;
 }
 
diff --git a/src/import.c b/src/import.c
index 6233a15..4173fe9 100644
--- a/src/import.c
+++ b/src/import.c
@@ -193,7 +193,7 @@ parse_import_res (char *args, gpgme_import_result_t result)
 
 #define PARSE_NEXT(x)					\
   (x) = strtol (args, &tail, 0);			\
-  if (errno || args == tail || *tail != ' ')		\
+  if (errno || args == tail || !(*tail == ' ' || !*tail))   \
     /* The crypto backend does not behave.  */		\
     return trace_gpg_error (GPG_ERR_INV_ENGINE);        \
   args = tail;
@@ -249,7 +249,7 @@ import_status_handler (void *priv, gpgme_status_code_t code, char *args)
     default:
       break;
     }
-  return 0;
+  return err;
 }
 
 

-----------------------------------------------------------------------

Summary of changes:
 src/engine-gpgsm.c | 11 +++++++++--
 src/import.c       |  4 ++--
 2 files changed, 11 insertions(+), 4 deletions(-)


hooks/post-receive
-- 
GnuPG Made Easy
http://git.gnupg.org




More information about the Gnupg-commits mailing list