gpg: Assert that an opaque parameter is really what we expect.
authorWerner Koch <wk@gnupg.org>
Fri, 31 Mar 2017 18:06:54 +0000 (20:06 +0200)
committerWerner Koch <wk@gnupg.org>
Fri, 31 Mar 2017 18:07:33 +0000 (20:07 +0200)
* g10/gpg.h (SERVER_CONTROL_MAGIC): New const.
(server_control_s): Add field 'magic'.
* g10/gpg.c (gpg_init_default_ctrl): Init MAGIC.
* g10/import.c (impex_filter_getval): Assert MAGIC.

Signed-off-by: Werner Koch <wk@gnupg.org>
g10/gpg.c
g10/gpg.h
g10/import.c

index 28e0a9c..c9ae28c 100644 (file)
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -2182,7 +2182,7 @@ set_compliance_option (enum cmd_and_opt_values option)
 static void
 gpg_init_default_ctrl (ctrl_t ctrl)
 {
-  (void)ctrl;
+  ctrl->magic = SERVER_CONTROL_MAGIC;
 }
 
 
index 3bf023b..c663585 100644 (file)
--- a/g10/gpg.h
+++ b/g10/gpg.h
@@ -68,11 +68,20 @@ struct tofu_dbs_s;
 typedef struct tofu_dbs_s *tofu_dbs_t;
 
 
+#if SIZEOF_UNSIGNED_LONG == 8
+# define SERVER_CONTROL_MAGIC 0x53616c696e676572
+#else
+# define SERVER_CONTROL_MAGIC 0x53616c69
+#endif
+
 /* Session control object.  This object is passed to most functions to
    convey the status of a session.  Note that the defaults are set by
    gpg_init_default_ctrl(). */
 struct server_control_s
 {
+  /* Always has the value SERVER_CONTROL_MAGIC.  */
+  unsigned long magic;
+
   /* Local data for server.c  */
   struct server_local_s *server_local;
 
index abc811d..54d649b 100644 (file)
@@ -1182,6 +1182,8 @@ impex_filter_getval (void *cookie, const char *propname)
   static char numbuf[20];
   const char *result;
 
+  log_assert (ctrl && ctrl->magic == SERVER_CONTROL_MAGIC);
+
   if (node->pkt->pkttype == PKT_USER_ID
       || node->pkt->pkttype == PKT_ATTRIBUTE)
     {