[Pkg-gnupg-commit] [gnupg2] 105/159: common: Fix iobuf API of filter function for alignment.

Daniel Kahn Gillmor dkg at fifthhorseman.net
Wed Jan 27 13:23:59 UTC 2016


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

dkg pushed a commit to branch master
in repository gnupg2.

commit 3f52c7da3940ec06572270d511000dc7fe9c27d2
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Tue Jan 12 10:32:20 2016 +0900

    common: Fix iobuf API of filter function for alignment.
    
    * common/iobuf.h (IOBUFCTRL_DESC): Change the call semantics.
    * common/iobuf.c (iobuf_desc): Add the second argument DESC.
    (print_chain, iobuf_close, do_open, iobuf_sockopen, iobuf_ioctl)
    (iobuf_push_filter2, pop_filter, iobuf_write_temp): Change calls
    of iobuf_desc.
    (file_filter, file_es_filter, sock_filter, block_filter): Fill the
    description.
    * common/t-iobuf.c (every_other_filter, double_filter): Likewise.
    * g10/armor.c, g10/cipher.c, g10/compress-bz2.c, g10/compress.c,
    g10/decrypt-data.c, g10/encrypt.c, g10/mdfilter.c, g10/progress.c,
    g10/textfilter.c: Likewise.
    
    --
    
    Newer GCC warns against possible alignment difference of pointers.
    This change can silence those warnings.
    
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>
---
 common/iobuf.c     | 52 ++++++++++++++++++++++++++++++++--------------------
 common/iobuf.h     |  8 ++++----
 common/t-iobuf.c   |  5 +++--
 g10/armor.c        |  2 +-
 g10/cipher.c       |  2 +-
 g10/compress-bz2.c |  2 +-
 g10/compress.c     |  2 +-
 g10/decrypt-data.c |  4 ++--
 g10/encrypt.c      |  2 +-
 g10/mdfilter.c     |  2 +-
 g10/progress.c     |  2 +-
 g10/textfilter.c   |  2 +-
 12 files changed, 49 insertions(+), 36 deletions(-)

diff --git a/common/iobuf.c b/common/iobuf.c
index d149e2e..b6e7885 100644
--- a/common/iobuf.c
+++ b/common/iobuf.c
@@ -578,7 +578,7 @@ file_filter (void *opaque, int control, iobuf_t chain, byte * buf,
     }
   else if (control == IOBUFCTRL_DESC)
     {
-      *(char **) buf = "file_filter(fd)";
+      mem2str (buf, "file_filter(fd)", *ret_len);
     }
   else if (control == IOBUFCTRL_FREE)
     {
@@ -667,7 +667,7 @@ file_es_filter (void *opaque, int control, iobuf_t chain, byte * buf,
     }
   else if (control == IOBUFCTRL_DESC)
     {
-      *(char **) buf = "estream_filter";
+      mem2str (buf, "estream_filter", *ret_len);
     }
   else if (control == IOBUFCTRL_FREE)
     {
@@ -765,7 +765,7 @@ sock_filter (void *opaque, int control, iobuf_t chain, byte * buf,
     }
   else if (control == IOBUFCTRL_DESC)
     {
-      *(char **) buf = "sock_filter";
+      mem2str (buf, "sock_filter", *ret_len);
     }
   else if (control == IOBUFCTRL_FREE)
     {
@@ -993,7 +993,7 @@ block_filter (void *opaque, int control, iobuf_t chain, byte * buffer,
     }
   else if (control == IOBUFCTRL_DESC)
     {
-      *(char **) buf = "block_filter";
+      mem2str (buf, "block_filter", *ret_len);
     }
   else if (control == IOBUFCTRL_FREE)
     {
@@ -1057,19 +1057,23 @@ block_filter (void *opaque, int control, iobuf_t chain, byte * buffer,
   return rc;
 }
 
+#define MAX_IOBUF_DESC 32
+/*
+ * Fill the buffer by the description of iobuf A.
+ * The buffer size should be MAX_IOBUF_DESC (or larger).
+ * Returns BUF as (const char *).
+ */
 static const char *
-iobuf_desc (iobuf_t a)
+iobuf_desc (iobuf_t a, byte *buf)
 {
-  size_t dummy_len = 0;
-  const char *desc = "?";
+  size_t len = MAX_IOBUF_DESC;
 
   if (! a || ! a->filter)
-    return desc;
-
-  a->filter (a->filter_ov, IOBUFCTRL_DESC, NULL,
-	     (byte *) & desc, &dummy_len);
+    memcpy (buf, "?", 2);
+  else
+    a->filter (a->filter_ov, IOBUFCTRL_DESC, NULL, buf, &len);
 
-  return desc;
+  return buf;
 }
 
 static void
@@ -1079,9 +1083,10 @@ print_chain (iobuf_t a)
     return;
   for (; a; a = a->chain)
     {
+      byte desc[MAX_IOBUF_DESC];
 
       log_debug ("iobuf chain: %d.%d '%s' filter_eof=%d start=%d len=%d\n",
-		 a->no, a->subno, iobuf_desc (a), a->filter_eof,
+		 a->no, a->subno, iobuf_desc (a, desc), a->filter_eof,
 		 (int) a->d.start, (int) a->d.len);
     }
 }
@@ -1126,6 +1131,7 @@ iobuf_close (iobuf_t a)
 
   for (; a; a = a_chain)
     {
+      byte desc[MAX_IOBUF_DESC];
       int rc2 = 0;
 
       a_chain = a->chain;
@@ -1135,7 +1141,7 @@ iobuf_close (iobuf_t a)
 
       if (DBG_IOBUF)
 	log_debug ("iobuf-%d.%d: close '%s'\n",
-		   a->no, a->subno, iobuf_desc (a));
+		   a->no, a->subno, iobuf_desc (a, desc));
 
       if (a->filter && (rc2 = a->filter (a->filter_ov, IOBUFCTRL_FREE,
 					 a->chain, NULL, &dummy_len)))
@@ -1275,6 +1281,7 @@ do_open (const char *fname, int special_filenames,
   size_t len = 0;
   int print_only = 0;
   int fd;
+  byte desc[MAX_IOBUF_DESC];
 
   assert (use == IOBUF_INPUT || use == IOBUF_OUTPUT);
 
@@ -1321,7 +1328,7 @@ do_open (const char *fname, int special_filenames,
   file_filter (fcx, IOBUFCTRL_INIT, NULL, NULL, &len);
   if (DBG_IOBUF)
     log_debug ("iobuf-%d.%d: open '%s' desc=%s fd=%d\n",
-	       a->no, a->subno, fname, iobuf_desc (a), FD2INT (fcx->fp));
+	       a->no, a->subno, fname, iobuf_desc (a, desc), FD2INT (fcx->fp));
 
   return a;
 }
@@ -1439,6 +1446,8 @@ iobuf_sockopen (int fd, const char *mode)
 int
 iobuf_ioctl (iobuf_t a, iobuf_ioctl_t cmd, int intval, void *ptrval)
 {
+  byte desc[MAX_IOBUF_DESC];
+
   if (cmd == IOBUF_IOCTL_KEEP_OPEN)
     {
       /* Keep system filepointer/descriptor open.  This was used in
@@ -1446,7 +1455,7 @@ iobuf_ioctl (iobuf_t a, iobuf_ioctl_t cmd, int intval, void *ptrval)
          anymore.  */
       if (DBG_IOBUF)
 	log_debug ("iobuf-%d.%d: ioctl '%s' keep_open=%d\n",
-		   a ? a->no : -1, a ? a->subno : -1, iobuf_desc (a),
+		   a ? a->no : -1, a ? a->subno : -1, iobuf_desc (a, desc),
 		   intval);
       for (; a; a = a->chain)
 	if (!a->chain && a->filter == file_filter)
@@ -1480,7 +1489,7 @@ iobuf_ioctl (iobuf_t a, iobuf_ioctl_t cmd, int intval, void *ptrval)
     {
       if (DBG_IOBUF)
 	log_debug ("iobuf-%d.%d: ioctl '%s' no_cache=%d\n",
-		   a ? a->no : -1, a ? a->subno : -1, iobuf_desc (a),
+		   a ? a->no : -1, a ? a->subno : -1, iobuf_desc (a, desc),
 		   intval);
       for (; a; a = a->chain)
 	if (!a->chain && a->filter == file_filter)
@@ -1658,8 +1667,9 @@ iobuf_push_filter2 (iobuf_t a,
 
   if (DBG_IOBUF)
     {
+      byte desc[MAX_IOBUF_DESC];
       log_debug ("iobuf-%d.%d: push '%s'\n",
-		 a->no, a->subno, iobuf_desc (a));
+		 a->no, a->subno, iobuf_desc (a, desc));
       print_chain (a);
     }
 
@@ -1681,10 +1691,11 @@ pop_filter (iobuf_t a, int (*f) (void *opaque, int control,
   iobuf_t b;
   size_t dummy_len = 0;
   int rc = 0;
+  byte desc[MAX_IOBUF_DESC];
 
   if (DBG_IOBUF)
     log_debug ("iobuf-%d.%d: pop '%s'\n",
-	       a->no, a->subno, iobuf_desc (a));
+	       a->no, a->subno, iobuf_desc (a, desc));
   if (a->use == IOBUF_INPUT_TEMP || a->use == IOBUF_OUTPUT_TEMP)
     {
       /* This should be the last filter in the pipeline.  */
@@ -2188,6 +2199,7 @@ iobuf_write_temp (iobuf_t dest, iobuf_t source)
 size_t
 iobuf_temp_to_buffer (iobuf_t a, byte * buffer, size_t buflen)
 {
+  byte desc[MAX_IOBUF_DESC];
   size_t n;
 
   while (1)
@@ -2195,7 +2207,7 @@ iobuf_temp_to_buffer (iobuf_t a, byte * buffer, size_t buflen)
       int rc = filter_flush (a);
       if (rc)
 	log_bug ("Flushing iobuf %d.%d (%s) from iobuf_temp_to_buffer failed.  Ignoring.\n",
-		 a->no, a->subno, iobuf_desc (a));
+		 a->no, a->subno, iobuf_desc (a, desc));
       if (! a->chain)
 	break;
       a = a->chain;
diff --git a/common/iobuf.h b/common/iobuf.h
index cb79105..69764d6 100644
--- a/common/iobuf.h
+++ b/common/iobuf.h
@@ -404,10 +404,10 @@ int iobuf_cancel (iobuf_t iobuf);
        called on the pipeline.
 
      IOBUFCTRL_DESC: Called with this value to get a human-readable
-       description of the filter.  * (char **) BUF should set to the
-       NUL-terminated string.  Note: you need to keep track of this
-       value and, if necessary, free it when the filter function is
-       called with control set to IOBUFCTRL_FREE.
+       description of the filter.  *LEN is the size of the buffer.
+       The description is filled into BUF, NUL-terminated.  Always
+       returns 0.  When the size of the buffer is shorter than the
+       description, it is truncated and not NUL-terminated.
   */
 int iobuf_push_filter (iobuf_t a, int (*f) (void *opaque, int control,
 					    iobuf_t chain, byte * buf,
diff --git a/common/t-iobuf.c b/common/t-iobuf.c
index 99581b9..2835df4 100644
--- a/common/t-iobuf.c
+++ b/common/t-iobuf.c
@@ -5,6 +5,7 @@
 #include <stdlib.h>
 
 #include "iobuf.h"
+#include "stringhelp.h"
 
 /* Return every other byte.  In particular, reads two bytes, returns
    the second one.  */
@@ -16,7 +17,7 @@ every_other_filter (void *opaque, int control,
 
   if (control == IOBUFCTRL_DESC)
     {
-      *(char **) buf = "every_other_filter";
+      mem2str (buf, "every_other_filter", *len);
     }
   if (control == IOBUFCTRL_UNDERFLOW)
     {
@@ -52,7 +53,7 @@ double_filter (void *opaque, int control,
 
   if (control == IOBUFCTRL_DESC)
     {
-      * (char **) buf = "double_filter";
+      mem2str (buf, "double_filter", *len);
     }
   if (control == IOBUFCTRL_FLUSH)
     {
diff --git a/g10/armor.c b/g10/armor.c
index 6c133a2..55ee5d3 100644
--- a/g10/armor.c
+++ b/g10/armor.c
@@ -1251,7 +1251,7 @@ armor_filter( void *opaque, int control,
         release_armor_context (afx);
     }
     else if( control == IOBUFCTRL_DESC )
-	*(char**)buf = "armor_filter";
+        mem2str (buf, "armor_filter", *ret_len);
     return rc;
 }
 
diff --git a/g10/cipher.c b/g10/cipher.c
index b72b144..41324c3 100644
--- a/g10/cipher.c
+++ b/g10/cipher.c
@@ -157,7 +157,7 @@ cipher_filter( void *opaque, int control,
 	gcry_cipher_close (cfx->cipher_hd);
     }
     else if( control == IOBUFCTRL_DESC ) {
-	*(char**)buf = "cipher_filter";
+        mem2str (buf, "cipher_filter", *ret_len);
     }
     return rc;
 }
diff --git a/g10/compress-bz2.c b/g10/compress-bz2.c
index ea80956..128eadf 100644
--- a/g10/compress-bz2.c
+++ b/g10/compress-bz2.c
@@ -248,6 +248,6 @@ compress_filter_bz2( void *opaque, int control,
 	zfx->release (zfx);
     }
   else if( control == IOBUFCTRL_DESC )
-    *(char**)buf = "compress_filter";
+    mem2str (buf, "compress_filter", *ret_len);
   return rc;
 }
diff --git a/g10/compress.c b/g10/compress.c
index 8047dbb..fd1ed6a 100644
--- a/g10/compress.c
+++ b/g10/compress.c
@@ -288,7 +288,7 @@ compress_filter( void *opaque, int control,
           zfx->release (zfx);
     }
     else if( control == IOBUFCTRL_DESC )
-	*(char**)buf = "compress_filter";
+        mem2str (buf, "compress_filter", *ret_len);
     return rc;
 }
 #endif /*HAVE_ZIP*/
diff --git a/g10/decrypt-data.c b/g10/decrypt-data.c
index 2d9f54f..1380faf 100644
--- a/g10/decrypt-data.c
+++ b/g10/decrypt-data.c
@@ -425,7 +425,7 @@ mdc_decode_filter (void *opaque, int control, IOBUF a,
     }
   else if ( control == IOBUFCTRL_DESC )
     {
-      *(char**)buf = "mdc_decode_filter";
+      mem2str (buf, "mdc_decode_filter", *ret_len);
     }
   return rc;
 }
@@ -496,7 +496,7 @@ decode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len)
     }
   else if ( control == IOBUFCTRL_DESC )
     {
-      *(char**)buf = "decode_filter";
+      mem2str (buf, "decode_filter", *ret_len);
     }
   return rc;
 }
diff --git a/g10/encrypt.c b/g10/encrypt.c
index eca1c27..abd8002 100644
--- a/g10/encrypt.c
+++ b/g10/encrypt.c
@@ -848,7 +848,7 @@ encrypt_filter (void *opaque, int control,
     }
   else if ( control == IOBUFCTRL_DESC )
     {
-      *(char**)buf = "encrypt_filter";
+      mem2str (buf, "encrypt_filter", *ret_len);
     }
   return rc;
 }
diff --git a/g10/mdfilter.c b/g10/mdfilter.c
index 708bdcd..88b2ee1 100644
--- a/g10/mdfilter.c
+++ b/g10/mdfilter.c
@@ -58,7 +58,7 @@ md_filter( void *opaque, int control,
 	*ret_len = i;
     }
     else if( control == IOBUFCTRL_DESC )
-	*(char**)buf = "md_filter";
+        mem2str (buf, "md_filter", *ret_len);
     return rc;
 }
 
diff --git a/g10/progress.c b/g10/progress.c
index ca20223..f4b4698 100644
--- a/g10/progress.c
+++ b/g10/progress.c
@@ -131,7 +131,7 @@ progress_filter (void *opaque, int control,
       release_progress_context (pfx);
     }
   else if (control == IOBUFCTRL_DESC)
-    *(char**)buf = "progress_filter";
+    mem2str (buf, "progress_filter", *ret_len);
   return rc;
 }
 
diff --git a/g10/textfilter.c b/g10/textfilter.c
index 394d9c3..da303c4 100644
--- a/g10/textfilter.c
+++ b/g10/textfilter.c
@@ -150,7 +150,7 @@ text_filter( void *opaque, int control,
 	tfx->buffer = NULL;
     }
     else if( control == IOBUFCTRL_DESC )
-	*(char**)buf = "text_filter";
+        mem2str (buf, "text_filter", *ret_len);
     return rc;
 }
 

-- 
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