[Pkg-gnupg-commit] [gnupg2] 92/116: common: Fix buffer copy code again.

Daniel Kahn Gillmor dkg at fifthhorseman.net
Tue Jan 24 04:40:57 UTC 2017


This is an automated email from the git hooks/post-receive script.

dkg pushed a commit to branch master
in repository gnupg2.

commit e031b3c16cfec583c4322c84d299b355f0849c77
Author: Werner Koch <wk at gnupg.org>
Date:   Thu Jan 19 14:58:23 2017 +0100

    common: Fix buffer copy code again.
    
    * common/exectool.c (my_error_from_errno): Remove.
    (copy_buffer_do_copy): Do without var RC.
    (copy_buffer_flush): Ditto.  Use ERRNO instead of es_write return
    code.
    (gnupg_exec_tool): Correctly return errors from es_read.
    --
    
    Fixes-commit: 55c9212a2338bf0b07c8cf3a69bcedaa28d48d43
    Signed-off-by: Werner Koch <wk at gnupg.org>
---
 common/exectool.c | 34 ++++++++++++++--------------------
 1 file changed, 14 insertions(+), 20 deletions(-)

diff --git a/common/exectool.c b/common/exectool.c
index 8c1f757..ed8225a 100644
--- a/common/exectool.c
+++ b/common/exectool.c
@@ -65,12 +65,6 @@ my_error_from_syserror (void)
   return gpg_err_make (default_errsource, gpg_err_code_from_syserror ());
 }
 
-static inline gpg_error_t
-my_error_from_errno (int rc)
-{
-  return gpg_err_make (default_errsource, gpg_err_code_from_errno (rc));
-}
-
 
 static void
 read_and_log_stderr (read_and_log_buffer_t *state, es_poll_t *fderr)
@@ -232,15 +226,13 @@ copy_buffer_shred (struct copy_buffer *c)
 static gpg_error_t
 copy_buffer_do_copy (struct copy_buffer *c, estream_t source, estream_t sink)
 {
-  int rc;
   gpg_error_t err;
   size_t nwritten = 0;
 
   if (c->nread == 0)
     {
       c->writep = c->buffer;
-      rc = es_read (source, c->buffer, sizeof c->buffer, &c->nread);
-      if (rc)
+      if (es_read (source, c->buffer, sizeof c->buffer, &c->nread))
         {
           err = my_error_from_syserror ();
           if (gpg_err_code (err) == GPG_ERR_EAGAIN)
@@ -256,8 +248,10 @@ copy_buffer_do_copy (struct copy_buffer *c, estream_t source, estream_t sink)
     return 0;	/* Done copying.  */
 
   nwritten = 0;
-  rc = sink? es_write (sink, c->writep, c->nread, &nwritten) : 0;
-  err = rc? my_error_from_errno (rc) : 0;
+  if (sink && es_write (sink, c->writep, c->nread, &nwritten))
+    err = my_error_from_syserror ();
+  else
+    err = 0;
 
   log_assert (nwritten <= c->nread);
   c->writep += nwritten;
@@ -283,13 +277,11 @@ copy_buffer_do_copy (struct copy_buffer *c, estream_t source, estream_t sink)
 static gpg_error_t
 copy_buffer_flush (struct copy_buffer *c, estream_t sink)
 {
-  int rc;
-  gpg_error_t err;
-  size_t nwritten;
+  gpg_error_t err = 0;
+  size_t nwritten = 0;
 
-  nwritten = 0;
-  rc = es_write (sink, c->writep, c->nread, &nwritten);
-  err = rc? my_error_from_errno (rc) : 0;
+  if (es_write (sink, c->writep, c->nread, &nwritten))
+    err = my_error_from_syserror ();
 
   log_assert (nwritten <= c->nread);
   c->writep += nwritten;
@@ -628,9 +620,11 @@ gnupg_exec_tool (const char *pgmname, const char *argv[],
 
   if (len)
     {
-      err = es_read (output, *result, len, &nread);
-      if (err)
-        goto leave;
+      if (es_read (output, *result, len, &nread))
+        {
+          err = my_error_from_syserror ();
+          goto leave;
+        }
       if (nread != len)
         log_fatal ("%s: short read from memstream\n", __func__);
     }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git



More information about the Pkg-gnupg-commit mailing list