[git] GpgOL - branch, master, updated. gpgol-1.4.0-10-g2b7009c

by Andre Heinecke cvs at cvs.gnupg.org
Mon Aug 15 14:05:49 CEST 2016


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 extension for MS Outlook".

The branch, master has been updated
       via  2b7009cb713145d858be3f7ec418799f447054aa (commit)
       via  6b5acfcb5f89e4a460e859aa42b347e4474e96cc (commit)
       via  683e4136aca4091a8e616c3364cff160a335f6ba (commit)
       via  037a5a7edf36038b28d2fb2bdb1e7ffeb6cb1756 (commit)
      from  7f0a05e9133d8e16f42fad6b972732197978d55b (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 2b7009cb713145d858be3f7ec418799f447054aa
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Aug 15 12:14:51 2016 +0200

    Unify COM Release and add debugging
    
    * src/util.h (gpgol_release): New. Adds debugging for
    debug_oom_extra.
    * src/attached-file-events.cpp,
    src/attachment.cpp,
    src/attic.c,
    src/display.cpp,
    src/eventsink.h,
    src/explorers.cpp,
    src/ext-commands.cpp,
    src/inspectors.cpp,
    src/item-events.cpp,
    src/mailitem-events.cpp,
    src/mailitem.cpp,
    src/mapihelp.cpp,
    src/message-events.cpp,
    src/message.cpp,
    src/mlang-charset.cpp,
    src/olflange.cpp,
    src/oomhelp.cpp,
    src/oomhelp.h,
    src/revert.cpp,
    src/ribbon-callbacks.cpp: Use gpgol_release.
    
    --
    This may help analyse rare crashes in case we have made an
    error with refcounting / releasing somewhere.

diff --git a/src/attached-file-events.cpp b/src/attached-file-events.cpp
index 6ae4f0b..94b99a3 100644
--- a/src/attached-file-events.cpp
+++ b/src/attached-file-events.cpp
@@ -202,7 +202,7 @@ GpgolAttachedFileEvents::OnWritePattToSzFile
   if (hr)
     {
       log_debug ("%s:%s: Read failed: hr=%#lx", SRCNAME, __func__, hr);
-      stream->Release ();
+      gpgol_release (stream);
       symenc_close (symenc);
       return E_ABORT;
     }
@@ -214,14 +214,14 @@ GpgolAttachedFileEvents::OnWritePattToSzFile
                     "Please use the decrypt/verify button to decrypt the\n"
                     "entire message again.  Then open this attachment."),
                   "GpgOL", MB_ICONERROR|MB_OK);
-      stream->Release ();
+      gpgol_release (stream);
       symenc_close (symenc);
       return E_ABORT;
     }
 
   rc = decrypt_and_write_file (stream, file, symenc);
 
-  stream->Release ();
+  gpgol_release (stream);
   symenc_close (symenc);
   return rc;
 }
diff --git a/src/attachment.cpp b/src/attachment.cpp
index 0ccf2d9..6f31510 100644
--- a/src/attachment.cpp
+++ b/src/attachment.cpp
@@ -298,7 +298,7 @@ do_crypt (LPDISPATCH mailitem, bool protect)
         {
           log_debug ("%s:%s: Failed to get MapiObject of attachment: %p",
                      SRCNAME, __func__, attachment);
-          attachment->Release ();
+          gpgol_release (attachment);
           continue;
         }
 
@@ -310,13 +310,13 @@ do_crypt (LPDISPATCH mailitem, bool protect)
             {
               log_error ("%s:%s: Error: Session crypto failed.",
                          SRCNAME, __func__);
-              mapi_attachment->Release ();
-              attachment->Release ();
+              gpgol_release (mapi_attachment);
+              gpgol_release (attachment);
               goto done;
             }
         }
-      mapi_attachment->Release ();
-      attachment->Release ();
+      gpgol_release (mapi_attachment);
+      gpgol_release (attachment);
     }
   err = 0;
 
diff --git a/src/attic.c b/src/attic.c
index 1218eaa..4c30f9a 100644
--- a/src/attic.c
+++ b/src/attic.c
@@ -31,7 +31,7 @@ is_preview_pane_visible (LPEXCHEXTCALLBACK eecb)
   hr = pDisp->Invoke (dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
                       DISPATCH_METHOD, &dispparams,
                       &rVariant, NULL, NULL);
-  pDisp->Release();
+  gpgol_release (pDisp);
   pDisp = NULL;
   if (hr == S_OK && rVariant.vt != VT_BOOL)
     {
@@ -84,7 +84,7 @@ show_preview_pane (LPEXCHEXTCALLBACK eecb, int visible)
   hr = pDisp->Invoke (dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
                       DISPATCH_METHOD, &dispparams,
                       NULL, NULL, NULL);
-  pDisp->Release();
+  gpgol_release (pDisp);
   pDisp = NULL;
   if (hr != S_OK)
     log_debug ("%s:%s: invoking ShowPane(%d) failed: %#lx",
diff --git a/src/display.cpp b/src/display.cpp
index bd10921..ecba56a 100644
--- a/src/display.cpp
+++ b/src/display.cpp
@@ -263,7 +263,7 @@ update_display (HWND hwnd, LPDISPATCH inspector, int is_sensitive,
               put_oom_string (item, "Body", "");
             }
           rc = put_oom_string (item, is_html? "HTMLBody":"Body", text);
-          item->Release ();
+          gpgol_release (item);
         }
       else
         rc = -1;
@@ -361,7 +361,7 @@ open_inspector (LPEXCHEXTCALLBACK peecb, LPMESSAGE message)
   if (!entryid)
     {
       log_error ("%s:%s: PR_ENTRYID missing\n",  SRCNAME, __func__);
-      session->Release ();
+      gpgol_release (session);
       return -1;
     }
   log_hexdump (entryid, entryidlen, "orig entryid=");
@@ -370,7 +370,7 @@ open_inspector (LPEXCHEXTCALLBACK peecb, LPMESSAGE message)
   if (!store_entryid)
     {
       log_error ("%s:%s: PR_STORE_ENTRYID missing\n",  SRCNAME, __func__);
-      session->Release ();
+      gpgol_release (session);
       xfree (entryid);
       return -1;
     }
@@ -379,7 +379,7 @@ open_inspector (LPEXCHEXTCALLBACK peecb, LPMESSAGE message)
   if (!parent_entryid)
     {
       log_error ("%s:%s: PR_PARENT_ENTRYID missing\n",  SRCNAME, __func__);
-      session->Release ();
+      gpgol_release (session);
       xfree (store_entryid);
       xfree (entryid);
       return -1;
@@ -393,7 +393,7 @@ open_inspector (LPEXCHEXTCALLBACK peecb, LPMESSAGE message)
     {
       log_error ("%s:%s: OpenMsgStore failed: hr=%#lx\n", 
                  SRCNAME, __func__, hr);
-      session->Release ();
+      gpgol_release (session);
       xfree (parent_entryid);
       xfree (store_entryid);
       xfree (entryid);
@@ -408,11 +408,11 @@ open_inspector (LPEXCHEXTCALLBACK peecb, LPMESSAGE message)
     {
       log_error ("%s:%s: OpenEntry failed: hr=%#lx\n", 
                  SRCNAME, __func__, hr);
-      session->Release ();
+      gpgol_release (session);
       xfree (parent_entryid);
       xfree (store_entryid);
       xfree (entryid);
-      mdb->Release ();
+      gpgol_release (mdb);
       return -1;
     }
   log_debug ("%s:%s: mdb::OpenEntry succeeded type=%lx\n", 
@@ -426,12 +426,12 @@ open_inspector (LPEXCHEXTCALLBACK peecb, LPMESSAGE message)
     {
       log_error ("%s:%s: OpenEntry[folder] failed: hr=%#lx\n", 
                  SRCNAME, __func__, hr);
-      session->Release ();
+      gpgol_release (session);
       xfree (parent_entryid);
       xfree (store_entryid);
       xfree (entryid);
-      mdb->Release ();
-      mfolder->Release ();
+      gpgol_release (mdb);
+      gpgol_release (mfolder);
       return -1;
     }
   log_debug ("%s:%s: mdb::OpenEntry[message] succeeded type=%lx\n", 
@@ -443,18 +443,18 @@ open_inspector (LPEXCHEXTCALLBACK peecb, LPMESSAGE message)
     {
       log_error ("%s:%s: PrepareForm failed: hr=%#lx\n", 
                  SRCNAME, __func__, hr);
-      session->Release ();
+      gpgol_release (session);
       xfree (parent_entryid);
       xfree (store_entryid);
       xfree (entryid);
-      mdb->Release ();
-      mfolder->Release ();
-      message2->Release ();
+      gpgol_release (mdb);
+      gpgol_release (mfolder);
+      gpgol_release (message2);
       return -1;
     }
 
   /* Message2 is now represented by TOKEN; we need to release it.  */
-  message2->Release(); message2 = NULL;
+  gpgol_release (message2); message2 = NULL;
 
   hr = session->ShowForm (0,
                           mdb, mfolder,
@@ -466,12 +466,12 @@ open_inspector (LPEXCHEXTCALLBACK peecb, LPMESSAGE message)
   log_debug ("%s:%s: ShowForm result: hr=%#lx\n", 
              SRCNAME, __func__, hr);
   
-  session->Release ();
+  gpgol_release (session);
   xfree (parent_entryid);
   xfree (store_entryid);
   xfree (entryid);
-  mdb->Release ();
-  mfolder->Release ();
+  gpgol_release (mdb);
+  gpgol_release (mfolder);
   return FAILED(hr)? -1:0;
 }
 
diff --git a/src/eventsink.h b/src/eventsink.h
index 26aaad8..3eb900c 100644
--- a/src/eventsink.h
+++ b/src/eventsink.h
@@ -96,7 +96,7 @@ STDMETHODIMP subcls::Invoke (DISPID dispid, REFIID riid, LCID lcid,      \
   if (m_pCP)                                                             \
     m_pCP->Unadvise(m_cookie);                                           \
   if (m_object)                                                          \
-    m_object->Release();                                                 \
+    gpgol_release (m_object);                                                 \
 }                                                                        \
 /* End of macro EVENT_SINK_DTOR_DEFAULT_CODE.  */
 
@@ -179,18 +179,18 @@ LPDISPATCH install_ ## subcls ## _sink (LPDISPATCH object)               \
     {                                                                    \
       log_error ("%s:%s:%s: ConnectionPoint not found: hr=%#lx",         \
                  SRCNAME,#subcls,  __func__, hr);                        \
-      pCPC->Release ();                                                  \
+      gpgol_release (pCPC);                                                  \
       return NULL;                                                       \
     }                                                                    \
   sink = new subcls; /* Note: Advise does another AddRef.  */            \
   hr = pCP->Advise ((LPUNKNOWN)sink, &cookie);                           \
-  pCPC->Release ();                                                      \
+  gpgol_release (pCPC);                                                      \
   if (hr != S_OK)                                                        \
     {                                                                    \
       log_error ("%s:%s:%s: Advice failed: hr=%#lx",                     \
                  SRCNAME, #subcls, __func__, hr);                        \
-      pCP->Release ();                                                   \
-      sink->Release ();                                                  \
+      gpgol_release (pCP);                                                   \
+      gpgol_release (sink);                                                  \
       return NULL;                                                       \
     }                                                                    \
   if (debug_oom)                                                         \
@@ -226,7 +226,7 @@ void detach_ ## subcls ## _sink (LPDISPATCH obj)                         \
       if (debug_oom_extra)                                               \
         log_debug ("%s:%s:%s: Releasing connt point",                    \
                    SRCNAME, #subcls, __func__);                          \
-      sink->m_pCP->Release ();                                           \
+      gpgol_release (sink->m_pCP);                                           \
       sink->m_pCP = NULL;                                                \
     }                                                                    \
   if (sink->m_object)                                                    \
@@ -234,10 +234,10 @@ void detach_ ## subcls ## _sink (LPDISPATCH obj)                         \
       if (debug_oom_extra)                                               \
         log_debug ("%s:%s:%s: Releasing actual object",                  \
                    SRCNAME, #subcls, __func__);                          \
-      sink->m_object->Release ();                                        \
+      gpgol_release (sink->m_object);                                        \
       sink->m_object = NULL;                                             \
     }                                                                    \
-  sink->Release ();                                                      \
+  gpgol_release (sink);                                                      \
 }                                                                        \
 /* End of macro END_EVENT_SINK.  */
 
diff --git a/src/explorers.cpp b/src/explorers.cpp
index 388fdff..68193bb 100644
--- a/src/explorers.cpp
+++ b/src/explorers.cpp
@@ -95,11 +95,11 @@ add_explorer_controls (LPOOMEXPLORER explorer)
       return;
     }
   button = get_oom_control_bytag (obj, "GpgOL_Start_Key_Manager");
-  obj->Release ();
+  gpgol_release (obj);
   obj = NULL;
   if (button)
     {
-      button->Release ();
+      gpgol_release (button);
       log_debug ("%s:%s: Leave (Controls are already added)",
                  SRCNAME, __func__);
       return;
@@ -128,7 +128,7 @@ add_explorer_controls (LPOOMEXPLORER explorer)
           
           install_GpgolCommandBarButtonEvents_sink (button);
           /* Fixme:  Save the returned object for an Unadvice.  */
-          button->Release ();
+          gpgol_release (button);
         }
 
       button = add_oom_button (controls);
@@ -141,10 +141,10 @@ add_explorer_controls (LPOOMEXPLORER explorer)
           
           install_GpgolCommandBarButtonEvents_sink (button);
           /* Fixme:  Save the returned object for an Unadvice.  */
-          button->Release ();
+          gpgol_release (button);
         }
 
-      controls->Release ();
+      gpgol_release (controls);
       controls = NULL;
     }
 
@@ -169,9 +169,9 @@ add_explorer_controls (LPOOMEXPLORER explorer)
           
           install_GpgolCommandBarButtonEvents_sink (button);
           /* Fixme:  store the event sink object somewhere.  */
-          button->Release ();
+          gpgol_release (button);
         }
-      controls->Release ();
+      gpgol_release (controls);
     }
   
   log_debug ("%s:%s: Leave", SRCNAME, __func__);
@@ -217,7 +217,7 @@ run_explorer_revert_folder (LPDISPATCH button)
           if (obj)
             {
               gpgol_folder_revert (obj);
-              obj->Release ();
+              gpgol_release (obj);
             }
         }
     }
diff --git a/src/ext-commands.cpp b/src/ext-commands.cpp
index 0411cf0..82f978f 100644
--- a/src/ext-commands.cpp
+++ b/src/ext-commands.cpp
@@ -119,7 +119,7 @@ get_inspector (LPEXCHEXTCALLBACK eecb, HWND hwnd)
         {
           /* This should be MailItem; use the getInspector method.  */
           inspector = get_oom_object (obj, "GetInspector");
-          obj->Release ();
+          gpgol_release (obj);
         }
     }
   return inspector;
@@ -144,7 +144,7 @@ get_crypto_flags (LPEXCHEXTCALLBACK eecb, HWND hwnd,
   else
     {
       rc = get_inspector_composer_flags (inspector, r_sign, r_encrypt);
-      inspector->Release ();
+      gpgol_release (inspector);
     }
   return rc;
 }
@@ -161,7 +161,7 @@ set_crypto_flags (LPEXCHEXTCALLBACK eecb, HWND hwnd, bool sign, bool encrypt)
   else
     {
       set_inspector_composer_flags (inspector, sign, encrypt);
-      inspector->Release ();
+      gpgol_release (inspector);
     }
 }
 
@@ -256,7 +256,7 @@ GpgolExtCommands::InstallCommands (
                   msgcache_unref (refhandle);
                   xfree (key);
                 }
-              obj->Release ();
+              gpgol_release (obj);
             }
         }
       
@@ -345,7 +345,7 @@ GpgolExtCommands::DoCommand (LPEXCHEXTCALLBACK eecb, UINT nCommandID)
           hr = pDisp->Invoke (dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
                               DISPATCH_METHOD, &dispparams,
                               NULL, NULL, NULL);
-          pDisp->Release();
+          gpgol_release (pDisp);
           pDisp = NULL;
           if (hr == S_OK)
             {
@@ -360,7 +360,7 @@ GpgolExtCommands::DoCommand (LPEXCHEXTCALLBACK eecb, UINT nCommandID)
       else
         {
           if (pDisp)
-            pDisp->Release ();
+            gpgol_release (pDisp);
           log_debug ("%s:%s: invoking Close failed: no Close method)",
                      SRCNAME, __func__);
         }
diff --git a/src/inspectors.cpp b/src/inspectors.cpp
index 729a7e9..631839b 100644
--- a/src/inspectors.cpp
+++ b/src/inspectors.cpp
@@ -250,7 +250,7 @@ find_ole_window (LPOOMINSPECTOR inspector)
                  SRCNAME, __func__, hr);
       hwnd = NULL;
     }
-  olewndw->Release ();
+  gpgol_release (olewndw);
   log_debug ("%s:%s: inspector %p has hwnd=%p",
              SRCNAME, __func__, inspector, hwnd);
   return hwnd;
@@ -324,18 +324,18 @@ deregister_inspector (LPGPGOLINSPECTOREVENTS sink)
       if (ol->sink)
         {
           detach_GpgolCommandBarButtonEvents_sink (ol->sink);
-          ol->sink->Release ();
+          gpgol_release (ol->sink);
         }
       if (ol->button)
         {
           del_oom_button (ol->button);
-          ol->button->Release ();
+          gpgol_release (ol->button);
         }
       xfree (ol);
     }
 
-  r->inspector->Release ();
-  r->eventsink->Release ();
+  gpgol_release (r->inspector);
+  gpgol_release (r->eventsink);
 
   xfree (r);
 }
@@ -462,9 +462,9 @@ GpgolInspectorsEvents::NewInspector (LPOOMINSPECTOR inspector)
   if (obj)
     {
       register_inspector ((LPGPGOLINSPECTOREVENTS)obj, inspector);
-      obj->Release ();
+      gpgol_release (obj);
     }
-  inspector->Release ();
+  gpgol_release (inspector);
   return S_OK;
 }
 
@@ -517,13 +517,13 @@ GpgolInspectorEvents::Activate (void)
         {
           // LPDISPATCH obj2 = install_GpgolItemEvents_sink (obj);
           // if (obj2)
-          //   obj2->Release ();
-          obj->Release ();
+          //   gpgol_release (obj2);
+          gpgol_release (obj);
         }
     }
   
   update_crypto_info (inspector);
-  inspector->Release ();
+  gpgol_release (inspector);
 }
 
 
@@ -550,7 +550,7 @@ is_inspector_in_composer_mode (LPDISPATCH inspector)
          the class is 43.  */
       in_composer = (!get_oom_bool (obj, "Sent") 
                      && get_oom_int (obj, "Class") == 43);
-      obj->Release ();
+      gpgol_release (obj);
     }
   else
     in_composer = false;
@@ -576,7 +576,7 @@ get_inspector_composer_flags (LPDISPATCH inspector,
   else
     {
       *r_sign = get_oom_int (button, "State") == msoButtonDown;
-      button->Release ();
+      gpgol_release (button);
     }
 
   button = get_button (inspector, "GpgOL_Inspector_Encrypt");
@@ -588,7 +588,7 @@ get_inspector_composer_flags (LPDISPATCH inspector,
   else
     {
       *r_encrypt = get_oom_int (button, "State") == msoButtonDown;
-      button->Release ();
+      gpgol_release (button);
     }
   
   if (!rc)
@@ -614,7 +614,7 @@ set_one_button (LPDISPATCH inspector, const char *tag, bool down)
     {
       if (put_oom_int (button, "State", down? msoButtonDown : msoButtonUp))
         rc = -1;
-      button->Release ();
+      gpgol_release (button);
     }
   return rc;
 }
@@ -710,7 +710,7 @@ add_inspector_controls (LPOOMINSPECTOR inspector)
               move_to_button_list (&buttonlist, obj, button, tag);
             }
           
-          controls->Release ();
+          gpgol_release (controls);
         }
     }
   
@@ -770,7 +770,7 @@ add_inspector_controls (LPOOMINSPECTOR inspector)
           move_to_button_list (&buttonlist, obj, button, tag);
         }
 
-      controls->Release ();
+      gpgol_release (controls);
     }
 
 
@@ -824,7 +824,7 @@ add_inspector_controls (LPOOMINSPECTOR inspector)
           move_to_button_list (&buttonlist, obj, button, tag);
         }
 
-      controls->Release ();
+      gpgol_release (controls);
     }
 
 
@@ -844,9 +844,9 @@ add_inspector_controls (LPOOMINSPECTOR inspector)
         {
           ol2 = ol->next;
           if (ol->sink)
-            ol->sink->Release ();
+            gpgol_release (ol->sink);
           if (ol->button)
-            ol->button->Release ();
+            gpgol_release (ol->button);
           xfree (ol);
         }
     }
@@ -892,9 +892,9 @@ update_crypto_info (LPDISPATCH inspector)
                   log_error ("%s:%s: error getting IMESSAGE: hr=%#lx",
                              SRCNAME, __func__, hr);
                 }
-              unknown->Release ();
+              gpgol_release (unknown);
             }
-          obj->Release ();
+          gpgol_release (obj);
         }
       if (message)
         {
@@ -938,7 +938,7 @@ update_crypto_info (LPDISPATCH inspector)
               iconrc = IDB_DECRYPT_16;
             }
           
-          message->Release ();
+          gpgol_release (message);
         }
     }
 
@@ -946,7 +946,7 @@ update_crypto_info (LPDISPATCH inspector)
   if (iconrc != -1)
     put_oom_icon (button, iconrc, 16);
   put_oom_bool (button, "Visible", (iconrc != -1));
-  button->Release ();
+  gpgol_release (button);
 }
 
 
@@ -982,14 +982,14 @@ get_message_from_button (unsigned long instid, LPDISPATCH *r_inspector)
                   log_error ("%s:%s: error getting IMESSAGE: hr=%#lx",
                              SRCNAME, __func__, hr);
                 }
-              unknown->Release ();
+              gpgol_release (unknown);
             }
-          obj->Release ();
+          gpgol_release (obj);
         }
       if (r_inspector)
         *r_inspector = inspector;
       else
-        inspector->Release ();
+        gpgol_release (inspector);
     }
   return message;
 }
@@ -1028,7 +1028,7 @@ toggle_button (LPDISPATCH button, const char *tag, int instid)
   
   log_debug ("%s:%s: setting `%s' state to %d", SRCNAME, __func__, tag2, state);
   set_one_button (inspector, tag2, state);
-  inspector->Release ();
+  gpgol_release (inspector);
 }
 
 
@@ -1059,12 +1059,12 @@ proc_inspector_button_click (LPDISPATCH button, const char *tag, int instid)
         {
           if (message_incoming_handler (message, hwnd, true))
             message_display_handler (message, inspector, hwnd);
-          message->Release ();
+          gpgol_release (message);
         }
       if (inspector)
         {
           update_crypto_info (inspector);
-          inspector->Release ();
+          gpgol_release (inspector);
         }
     }
   else if (!tagcmp (tag, "GpgOL_Inspector_Debug-0"))
@@ -1075,7 +1075,7 @@ proc_inspector_button_click (LPDISPATCH button, const char *tag, int instid)
       if (message)
         {
           message_show_info (message, hwnd);
-          message->Release ();
+          gpgol_release (message);
         }
     }
   else if (!tagcmp (tag, "GpgOL_Inspector_Debug-1"))
@@ -1092,7 +1092,7 @@ proc_inspector_button_click (LPDISPATCH button, const char *tag, int instid)
         {
           /* We sync here. */
           mapi_change_message_class (message, 1);
-          message->Release ();
+          gpgol_release (message);
         }
     }
   else if (!tagcmp (tag, "GpgOL_Inspector_Debug-3"))
@@ -1106,7 +1106,7 @@ proc_inspector_button_click (LPDISPATCH button, const char *tag, int instid)
                                          KEEP_OPEN_READWRITE|FORCE_SAVE);
           log_debug ("%s:%s: gpgol_message_revert returns %d\n", 
                      SRCNAME, __func__, rc);
-          message->Release ();
+          gpgol_release (message);
         }
     }
 
diff --git a/src/item-events.cpp b/src/item-events.cpp
index 36305f0..7e1aa39 100644
--- a/src/item-events.cpp
+++ b/src/item-events.cpp
@@ -155,9 +155,9 @@ GpgolItemEvents::OnOpenComplete (LPEXCHEXTCALLBACK eecb, ULONG flags)
             m_wasencrypted = true;
         }
       if (message)
-        message->Release ();
+        gpgol_release (message);
       if (mdb)
-        mdb->Release ();
+        gpgol_release (mdb);
     }
   
   return S_FALSE;
diff --git a/src/mailitem-events.cpp b/src/mailitem-events.cpp
index b376c53..5101610 100644
--- a/src/mailitem-events.cpp
+++ b/src/mailitem-events.cpp
@@ -90,7 +90,7 @@ MailItemEvents::~MailItemEvents()
   if (m_pCP)
     m_pCP->Unadvise(m_cookie);
   if (m_object)
-    m_object->Release();
+    gpgol_release (m_object);
 }
 
 static DWORD WINAPI
diff --git a/src/mailitem.cpp b/src/mailitem.cpp
index b1ad383..817d238 100644
--- a/src/mailitem.cpp
+++ b/src/mailitem.cpp
@@ -182,7 +182,7 @@ GpgolItemEvents::Write (PBOOL cancel_default)
               log_error ("%s:%s: error getting IMESSAGE: hr=%#lx",
                          SRCNAME, __func__, hr);
             }
-          unknown->Release ();
+          gpgol_release (unknown);
         }
 
       if (!message)
diff --git a/src/mapihelp.cpp b/src/mapihelp.cpp
index 25ef089..64fe721 100644
--- a/src/mapihelp.cpp
+++ b/src/mapihelp.cpp
@@ -491,7 +491,7 @@ mapi_get_body (LPMESSAGE message, size_t *r_nbytes)
       if (hr)
         {
           log_debug ("%s:%s: Stat failed: hr=%#lx", SRCNAME, __func__, hr);
-          stream->Release ();
+          gpgol_release (stream);
           return NULL;
         }
       
@@ -504,7 +504,7 @@ mapi_get_body (LPMESSAGE message, size_t *r_nbytes)
         {
           log_debug ("%s:%s: Read failed: hr=%#lx", SRCNAME, __func__, hr);
           xfree (body);
-          stream->Release ();
+          gpgol_release (stream);
           return NULL;
         }
       body[nread] = 0;
@@ -513,10 +513,10 @@ mapi_get_body (LPMESSAGE message, size_t *r_nbytes)
         {
           log_debug ("%s:%s: not enough bytes returned\n", SRCNAME, __func__);
           xfree (body);
-          stream->Release ();
+          gpgol_release (stream);
           return NULL;
         }
-      stream->Release ();
+      gpgol_release (stream);
       
       {
         char *tmp;
@@ -591,7 +591,7 @@ get_msgcls_from_pgp_lines (LPMESSAGE message)
   if (hr)
     {
       log_debug ("%s:%s: Stat failed: hr=%#lx", SRCNAME, __func__, hr);
-      stream->Release ();
+      gpgol_release (stream);
       return NULL;
     }
   
@@ -606,7 +606,7 @@ get_msgcls_from_pgp_lines (LPMESSAGE message)
     {
       log_debug ("%s:%s: Read failed: hr=%#lx", SRCNAME, __func__, hr);
       xfree (body);
-      stream->Release ();
+      gpgol_release (stream);
       return NULL;
     }
   body[nread] = 0;
@@ -616,10 +616,10 @@ get_msgcls_from_pgp_lines (LPMESSAGE message)
       log_debug ("%s:%s: not enough bytes returned\n", SRCNAME, __func__);
       
       xfree (body);
-      stream->Release ();
+      gpgol_release (stream);
       return NULL;
     }
-  stream->Release ();
+  gpgol_release (stream);
 
   if (!is_binary)
     {
@@ -717,14 +717,14 @@ is_really_cms_encrypted (LPMESSAGE message)
     {
       log_debug ("%s:%s: HrQueryAllRows failed: hr=%#lx",
                  SRCNAME, __func__, hr);
-      mapitable->Release ();
+      gpgol_release (mapitable);
       return -1;
     }
   n_attach = mapirows->cRows > 0? mapirows->cRows : 0;
   if (n_attach != 1)
     {
       FreeProws (mapirows);
-      mapitable->Release ();
+      gpgol_release (mapitable);
       log_debug ("%s:%s: not just one attachment", SRCNAME, __func__);
       return -1;
     }
@@ -805,11 +805,11 @@ is_really_cms_encrypted (LPMESSAGE message)
   
  leave:
   if (stream)
-    stream->Release ();
+    gpgol_release (stream);
   if (att)
-    att->Release ();
+    gpgol_release (att);
   FreeProws (mapirows);
-  mapitable->Release ();
+  gpgol_release (mapitable);
   return result;
 }
 
@@ -842,14 +842,14 @@ get_first_attach_mime_tag (LPMESSAGE message)
     {
       log_debug ("%s:%s: HrQueryAllRows failed: hr=%#lx",
                  SRCNAME, __func__, hr);
-      mapitable->Release ();
+      gpgol_release (mapitable);
       return NULL;
     }
   n_attach = mapirows->cRows > 0? mapirows->cRows : 0;
   if (n_attach != 1)
     {
       FreeProws (mapirows);
-      mapitable->Release ();
+      gpgol_release (mapitable);
       log_debug ("%s:%s: not just one attachment", SRCNAME, __func__);
       return NULL;
     }
@@ -887,9 +887,9 @@ get_first_attach_mime_tag (LPMESSAGE message)
   
  leave:
   if (att)
-    att->Release ();
+    gpgol_release (att);
   FreeProws (mapirows);
-  mapitable->Release ();
+  gpgol_release (mapitable);
   return result;
 }
 
@@ -1789,10 +1789,10 @@ mapi_to_mime (LPMESSAGE message, const char *filename)
           hr = 0;
         }
 
-      stream->Release ();
+      gpgol_release (stream);
     }
 
-  session->Release ();
+  gpgol_release (session);
   return hr;
 }
 
@@ -2037,7 +2037,7 @@ mapi_create_attach_table (LPMESSAGE message, int fast)
     {
       log_debug ("%s:%s: HrQueryAllRows failed: hr=%#lx",
                  SRCNAME, __func__, hr);
-      mapitable->Release ();
+      gpgol_release (mapitable);
       return NULL;
     }
   n_attach = mapirows->cRows > 0? mapirows->cRows : 0;
@@ -2047,7 +2047,7 @@ mapi_create_attach_table (LPMESSAGE message, int fast)
   if (!n_attach)
     {
       FreeProws (mapirows);
-      mapitable->Release ();
+      gpgol_release (mapitable);
       return NULL;
     }
 
@@ -2098,7 +2098,7 @@ mapi_create_attach_table (LPMESSAGE message, int fast)
             }
         }
       table[pos].attach_type = get_gpgolattachtype (att, moss_tag);
-      att->Release ();
+      gpgol_release (att);
     }
   table[0].private_mapitable = mapitable;
   FreeProws (mapirows);
@@ -2139,7 +2139,7 @@ mapi_release_attach_table (mapi_attach_item_t *table)
 
   mapitable = (LPMAPITABLE)table[0].private_mapitable;
   if (mapitable)
-    mapitable->Release ();
+    gpgol_release (mapitable);
   for (pos=0; !table[pos].end_of_table; pos++)
     {
       xfree (table[pos].filename);
@@ -2177,7 +2177,7 @@ mapi_get_attach_as_stream (LPMESSAGE message, mapi_attach_item_t *item,
   if (item->method != ATTACH_BY_VALUE)
     {
       log_error ("%s:%s: attachment: method not supported", SRCNAME, __func__);
-      att->Release ();
+      gpgol_release (att);
       return NULL;
     }
 
@@ -2187,14 +2187,14 @@ mapi_get_attach_as_stream (LPMESSAGE message, mapi_attach_item_t *item,
     {
       log_error ("%s:%s: can't open data stream of attachment: hr=%#lx",
                  SRCNAME, __func__, hr);
-      att->Release ();
+      gpgol_release (att);
       return NULL;
     }
 
   if (r_attach)
     *r_attach = att;
   else
-    att->Release ();
+    gpgol_release (att);
 
   return stream;
 }
@@ -2251,7 +2251,7 @@ attach_to_buffer (LPATTACH att, size_t *r_nbytes, int unprotect,
   if ( hr != S_OK )
     {
       log_error ("%s:%s: Stat failed: hr=%#lx", SRCNAME, __func__, hr);
-      stream->Release ();
+      gpgol_release (stream);
       return NULL;
     }
       
@@ -2263,7 +2263,7 @@ attach_to_buffer (LPATTACH att, size_t *r_nbytes, int unprotect,
     {
       log_error ("%s:%s: Read failed: hr=%#lx", SRCNAME, __func__, hr);
       xfree (buffer);
-      stream->Release ();
+      gpgol_release (stream);
       return NULL;
     }
   if (nread != statInfo.cbSize.QuadPart)
@@ -2272,7 +2272,7 @@ attach_to_buffer (LPATTACH att, size_t *r_nbytes, int unprotect,
       xfree (buffer);
       buffer = NULL;
     }
-  stream->Release ();
+  gpgol_release (stream);
 
   if (buffer && symenc)
     {
@@ -2331,12 +2331,12 @@ mapi_get_attach (LPMESSAGE message, int unprotect,
   if (item->method != ATTACH_BY_VALUE)
     {
       log_error ("%s:%s: attachment: method not supported", SRCNAME, __func__);
-      att->Release ();
+      gpgol_release (att);
       return NULL;
     }
 
   buffer = attach_to_buffer (att, r_nbytes, unprotect, NULL);
-  att->Release ();
+  gpgol_release (att);
 
   return buffer;
 }
@@ -2396,7 +2396,7 @@ mapi_mark_moss_attach (LPMESSAGE message, mapi_attach_item_t *item)
   retval = 0;
     
  leave:
-  att->Release ();
+  gpgol_release (att);
   return retval;
 }
 
@@ -3089,14 +3089,14 @@ mapi_get_gpgol_body_attachment (LPMESSAGE message,
     {
       log_debug ("%s:%s: HrQueryAllRows failed: hr=%#lx",
                  SRCNAME, __func__, hr);
-      mapitable->Release ();
+      gpgol_release (mapitable);
       return -1;
     }
   n_attach = mapirows->cRows > 0? mapirows->cRows : 0;
   if (!n_attach)
     {
       FreeProws (mapirows);
-      mapitable->Release ();
+      gpgol_release (mapitable);
       log_debug ("%s:%s: No attachments at all", SRCNAME, __func__);
       return -1;
     }
@@ -3162,15 +3162,15 @@ mapi_get_gpgol_body_attachment (LPMESSAGE message,
                   body = charset;
                 }
             }
-          att->Release ();
+          gpgol_release (att);
           if (r_ishtml)
             *r_ishtml = (bodytype == 2);
           break;
         }
-      att->Release ();
+      gpgol_release (att);
     }
   FreeProws (mapirows);
-  mapitable->Release ();
+  gpgol_release (mapitable);
   if (!found)
     {
       log_error ("%s:%s: no suitable body attachment found", SRCNAME,__func__);
@@ -3219,14 +3219,14 @@ mapi_delete_gpgol_body_attachment (LPMESSAGE message)
     {
       log_debug ("%s:%s: HrQueryAllRows failed: hr=%#lx",
                  SRCNAME, __func__, hr);
-      mapitable->Release ();
+      gpgol_release (mapitable);
       return 0;
     }
   n_attach = mapirows->cRows > 0? mapirows->cRows : 0;
   if (!n_attach)
     {
       FreeProws (mapirows);
-      mapitable->Release ();
+      gpgol_release (mapitable);
       return 0; /* No Attachments.  */
     }
 
@@ -3256,7 +3256,7 @@ mapi_delete_gpgol_body_attachment (LPMESSAGE message)
       if (has_gpgol_body_name (att)
           && get_gpgolattachtype (att, moss_tag) == ATTACHTYPE_FROMMOSS)
         {
-          att->Release ();
+          gpgol_release (att);
           hr = message->DeleteAttach (mapirows->aRow[pos].lpProps[0].Value.l,
                                       0, NULL, 0);
           if (hr)
@@ -3271,10 +3271,10 @@ mapi_delete_gpgol_body_attachment (LPMESSAGE message)
             }
           break;
         }
-      att->Release ();
+      gpgol_release (att);
     }
   FreeProws (mapirows);
-  mapitable->Release ();
+  gpgol_release (mapitable);
   return found;
 }
 
@@ -3354,12 +3354,12 @@ mapi_attachment_to_body (LPMESSAGE message, mapi_attach_item_t *item)
     {
       if (result)
         outstream->Revert ();
-      outstream->Release ();
+      gpgol_release (outstream);
     }
   if (instream)
-    instream->Release ();
+    gpgol_release (instream);
   if (att)
-    att->Release ();
+    gpgol_release (att);
   return result;
 }
 
diff --git a/src/message-events.cpp b/src/message-events.cpp
index fe6e72e..41af63a 100644
--- a/src/message-events.cpp
+++ b/src/message-events.cpp
@@ -109,7 +109,7 @@ get_crypto_flags (HWND hwnd, bool *r_sign, bool *r_encrypt)
   else
     {
       rc = get_inspector_composer_flags (inspector, r_sign, r_encrypt);
-      inspector->Release ();
+      gpgol_release (inspector);
     }
   return rc;
 }
@@ -218,17 +218,17 @@ GpgolMessageEvents::OnReadComplete (LPEXCHEXTCALLBACK eecb, ULONG flags)
                   if (opt.enable_debug & DBG_OOM)
                     log_debug ("%s:%s: %p->GetInspector returned %p",
                                SRCNAME, __func__, obj, inspector);
-                  obj->Release ();
+                  gpgol_release (obj);
                 }
             }
           message_display_handler (message, inspector, hwnd);
           if (inspector)
-            inspector->Release ();
+            gpgol_release (inspector);
         }
       if (message)
-        message->Release ();
+        gpgol_release (message);
       if (mdb)
-        mdb->Release ();
+        gpgol_release (mdb);
     }
   
 
@@ -265,7 +265,7 @@ GpgolMessageEvents::OnWrite (LPEXCHEXTCALLBACK eecb)
       else
         {
           bodyfmt = get_oom_int (obj, "BodyFormat");
-          obj->Release ();
+          gpgol_release (obj);
         }
 
       if (bodyfmt == 1)
diff --git a/src/message.cpp b/src/message.cpp
index 3adc7ed..6fe6747 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -563,7 +563,7 @@ message_verify (LPMESSAGE message, msgtype_t msgtype, int force, HWND hwnd)
         return -1;
       
       inbuf = pgp_mime_from_clearsigned (rawstream, &inbuflen);
-      rawstream->Release ();
+      gpgol_release (rawstream);
       if (!inbuf)
         return -1;
       protocol = PROTOCOL_OPENPGP;
@@ -654,7 +654,7 @@ message_verify (LPMESSAGE message, msgtype_t msgtype, int force, HWND hwnd)
       MessageBox (NULL, buf, "GpgOL", MB_ICONINFORMATION|MB_OK);
     }
   if (opaquestream)
-    opaquestream->Release ();
+    gpgol_release (opaquestream);
   xfree (inbuf);
                     
   if (err)
@@ -778,7 +778,7 @@ pgp_body_to_attachment (LPMESSAGE message)
                  SRCNAME, __func__, hr);
       goto leave;
     }
-  outstream->Release ();
+  gpgol_release (outstream);
   outstream = NULL;
   hr = newatt->SaveChanges (0);
   if (hr)
@@ -787,7 +787,7 @@ pgp_body_to_attachment (LPMESSAGE message)
                  SRCNAME, __func__, hr); 
       goto leave;
     }
-  newatt->Release ();
+  gpgol_release (newatt);
   newatt = NULL;
   hr = mapi_save_changes (message, KEEP_OPEN_READWRITE);
 
@@ -795,11 +795,11 @@ pgp_body_to_attachment (LPMESSAGE message)
   if (outstream)
     {
       outstream->Revert ();
-      outstream->Release ();
+      gpgol_release (outstream);
     }
   if (newatt)
-    newatt->Release ();
-  instream->Release ();
+    gpgol_release (newatt);
+  gpgol_release (instream);
   return hr? -1:0;
 }
 
@@ -1090,13 +1090,13 @@ message_decrypt (LPMESSAGE message, msgtype_t msgtype, int force, HWND hwnd)
         }
       
     }
-  cipherstream->Release ();
+  gpgol_release (cipherstream);
   retval = 0;
 
 
  leave:
   if (saved_attach)
-    saved_attach->Release ();
+    gpgol_release (saved_attach);
   mapi_release_attach_table (table);
   return retval;
 }
@@ -1139,7 +1139,7 @@ get_recipients (LPMESSAGE message)
     {
       log_debug_w32 (-1, "%s:%s: HrQueryAllRows failed", SRCNAME, __func__);
       if (lpRecipientTable)
-        lpRecipientTable->Release();
+        gpgol_release (lpRecipientTable);
       return NULL;
     }
 
@@ -1185,7 +1185,7 @@ get_recipients (LPMESSAGE message)
     }
 
   if (lpRecipientTable)
-    lpRecipientTable->Release();
+    gpgol_release (lpRecipientTable);
   if (lpRecipientRows)
     FreeProws(lpRecipientRows);	
   
diff --git a/src/mlang-charset.cpp b/src/mlang-charset.cpp
index 3c71d1d..128a428 100644
--- a/src/mlang-charset.cpp
+++ b/src/mlang-charset.cpp
@@ -19,7 +19,8 @@
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "util.h"
+#include "config.h"
+#include "common.h"
 #define INITGUID
 #include <initguid.h>
 DEFINE_GUID (IID_IMultiLanguage, 0x275c23e1,0x3747,0x11d0,0x9f,
@@ -56,7 +57,7 @@ char *ansi_charset_to_utf8 (const char *charset, char *input,
     {
       log_error ("%s:%s: Inlen too long. Bug.",
                  SRCNAME, __func__);
-      multilang->Release();
+      gpgol_release (multilang);
       return NULL;
     }
 
@@ -71,7 +72,7 @@ char *ansi_charset_to_utf8 (const char *charset, char *input,
     {
       log_error ("%s:%s: Failed to find charset for: %s",
                  SRCNAME, __func__, charset);
-      multilang->Release ();
+      gpgol_release (multilang);
       return NULL;
     }
   enc = (mime_info.uiInternetEncoding == 0) ? mime_info.uiCodePage :
@@ -84,14 +85,14 @@ char *ansi_charset_to_utf8 (const char *charset, char *input,
     {
       log_error ("%s:%s: Failed conversion.",
                  SRCNAME, __func__);
-      multilang->Release ();
+      gpgol_release (multilang);
       return NULL;
   }
   buf = (wchar_t*) xmalloc(sizeof(wchar_t) * (wlen + 1));
 
   err = multilang->ConvertStringToUnicode(&mode, enc, input, &uinlen,
                                           buf, &wlen);
-  multilang->Release ();
+  gpgol_release (multilang);
   if (FAILED (err))
     {
       log_error ("%s:%s: Failed conversion 2.",
diff --git a/src/olflange.cpp b/src/olflange.cpp
index 3850d06..1020da0 100644
--- a/src/olflange.cpp
+++ b/src/olflange.cpp
@@ -571,7 +571,7 @@ GpgolExt::~GpgolExt (void)
              SRCNAME, __func__, ext_context_name (m_lContext));
 
 //   if (m_pOutlookExtItemEvents)
-//     m_pOutlookExtItemEvents->Release ();
+//     gpgol_release (m_pOutlookExtItemEvents);
 
   if (m_lContext == EECONTEXT_SESSION || !m_lContext)
     {
@@ -687,9 +687,9 @@ GpgolExt::Install(LPEXCHEXTCALLBACK pEECB, ULONG lContext, ULONG lFlags)
             {
               olversion = get_oom_string (disp, "Version");
               g_ol_version_major = atoi (olversion);
-              disp->Release ();
+              gpgol_release (disp);
             }
-          obj->Release ();
+          gpgol_release (obj);
         }
     }
   pEECB->GetVersion (&lBuildVersion, EECBGV_GETBUILDVERSION);
@@ -897,7 +897,7 @@ install_sinks (LPEXCHEXTCALLBACK eecb)
         {
           install_GpgolExplorersEvents_sink (disp);
           /* Fixme: Register the event sink object somewhere.  */
-          disp->Release ();
+          gpgol_release (disp);
         }
 
       /* It seems that when installing this sink the first explorer
@@ -910,7 +910,7 @@ install_sinks (LPEXCHEXTCALLBACK eecb)
       else
         {
           add_explorer_controls ((LPOOMEXPLORER)disp);
-          disp->Release ();
+          gpgol_release (disp);
         }
 
       disp = get_oom_object ((LPDISPATCH)rootobj, "Application.Inspectors");
@@ -920,10 +920,10 @@ install_sinks (LPEXCHEXTCALLBACK eecb)
         {
           install_GpgolInspectorsEvents_sink (disp);
           /* Fixme: Register the event sink object somewhere.  */
-          disp->Release ();
+          gpgol_release (disp);
         }
 
-      rootobj->Release ();
+      gpgol_release (rootobj);
     }
 
   log_debug ("%s:%s: Leave", SRCNAME, __func__);
@@ -951,9 +951,9 @@ get_eecb_object (LPEXCHEXTCALLBACK eecb)
           hr = pObj->QueryInterface (IID_IDispatch, (LPVOID*)&pDisp);
           if (hr == S_OK && pDisp)
             result = pDisp;
-          pObj->Release ();
+          gpgol_release (pObj);
         }
-      pCb->Release ();
+      gpgol_release (pCb);
     }
   return result;
 }
diff --git a/src/oomhelp.cpp b/src/oomhelp.cpp
index e4cb7a4..3191c91 100644
--- a/src/oomhelp.cpp
+++ b/src/oomhelp.cpp
@@ -71,9 +71,9 @@ get_object_name (LPUNKNOWN obj)
 
  leave:
   if (tinfo)
-    tinfo->Release ();
+    gpgol_release (tinfo);
   if (disp)
-    disp->Release ();
+    gpgol_release (disp);
 
   return name;
 }
@@ -161,12 +161,12 @@ get_oom_object (LPDISPATCH pStart, const char *fullname)
 
       if (pDisp)
         {
-          pDisp->Release ();
+          gpgol_release (pDisp);
           pDisp = NULL;
         }
       pObj->QueryInterface (IID_IDispatch, (LPVOID*)&pDisp);
       if (pObj != pStart)
-        pObj->Release ();
+        gpgol_release (pObj);
       pObj = NULL;
       if (!pDisp)
         return NULL;  /* The object has no IDispatch interface.  */
@@ -184,7 +184,7 @@ get_oom_object (LPDISPATCH pStart, const char *fullname)
         dot = strchr (fullname, '.');
         if (dot == fullname)
           {
-            pDisp->Release ();
+            gpgol_release (pDisp);
             return NULL;  /* Empty name part: error.  */
           }
         else if (dot)
@@ -232,7 +232,7 @@ get_oom_object (LPDISPATCH pStart, const char *fullname)
                 }
               if (!parmstr)
                 {
-                  pDisp->Release ();
+                  gpgol_release (pDisp);
                   return NULL; /* Error:  Out of memory.  */
                 }
               n_parms = 1;
@@ -248,7 +248,7 @@ get_oom_object (LPDISPATCH pStart, const char *fullname)
         {
           if (parmstr)
             SysFreeString (parmstr);
-          pDisp->Release ();
+          gpgol_release (pDisp);
           return NULL;  /* Name not found.  */
         }
 
@@ -293,7 +293,7 @@ get_oom_object (LPDISPATCH pStart, const char *fullname)
           VariantClear (&vtResult);
           if (parmstr)
             SysFreeString (parmstr);
-          pDisp->Release ();
+          gpgol_release (pDisp);
           return NULL;  /* Invoke failed.  */
         }
 
@@ -690,7 +690,7 @@ get_oom_control_bytag (LPDISPATCH pDisp, const char *tag)
   if (hr == S_OK && rVariant.vt == VT_DISPATCH && rVariant.pdispVal)
     {
       rVariant.pdispVal->QueryInterface (IID_IDispatch, (LPVOID*)&result);
-      rVariant.pdispVal->Release ();
+      gpgol_release (rVariant.pdispVal);
       if (!result)
         log_debug ("%s:%s: Object with tag `%s' has no dispatch intf.",
                    SRCNAME, __func__, tag);
@@ -1170,7 +1170,7 @@ get_oom_base_message_from_mapi (LPDISPATCH mapi_message)
   log_oom_extra("%s:%s: About to call GetBaseMessage.",
                 SRCNAME, __func__);
   hr = secureMessage->GetBaseMessage (&message);
-  secureMessage->Release ();
+  gpgol_release (secureMessage);
   if (hr != S_OK)
     {
       log_error_w32 (hr, "Failed to GetBaseMessage.");
@@ -1192,7 +1192,7 @@ get_oom_base_message (LPDISPATCH mailitem)
       return NULL;
     }
   ret = get_oom_base_message_from_mapi ((LPDISPATCH)mapi_message);
-  mapi_message->Release ();
+  gpgol_release (mapi_message);
   return ret;
 }
 
@@ -1245,7 +1245,7 @@ get_oom_mapi_session ()
       return NULL;
     }
   mapiobj = get_oom_iunknown (oom_session, "MAPIOBJECT");
-  oom_session->Release ();
+  gpgol_release (oom_session);
 
   if (!mapiobj)
     {
@@ -1254,7 +1254,7 @@ get_oom_mapi_session ()
     }
   session = NULL;
   hr = mapiobj->QueryInterface (IID_IMAPISession, (void**)&session);
-  mapiobj->Release ();
+  gpgol_release (mapiobj);
   if (hr != S_OK || !session)
     {
       log_error ("%s:%s: error getting IMAPISession: hr=%#lx",
diff --git a/src/oomhelp.h b/src/oomhelp.h
index 3c1ae51..b069b31 100644
--- a/src/oomhelp.h
+++ b/src/oomhelp.h
@@ -25,9 +25,6 @@
 #include "mymapi.h"
 #include "myexchext.h"
 
-/* Helper to release dispatcher */
-#define RELDISP(dispatcher) if (dispatcher) dispatcher->Release()
-
 #define MSOCONTROLBUTTON    1
 #define MSOCONTROLEDIT      2
 #define MSOCONTROLDROPDOWN  3
diff --git a/src/revert.cpp b/src/revert.cpp
index 103b325..7573e30 100644
--- a/src/revert.cpp
+++ b/src/revert.cpp
@@ -146,7 +146,7 @@ message_revert (LPMESSAGE message)
             else
               result = 2;
 
-            att->Release ();
+            gpgol_release (att);
             att = NULL;
           }
         break;
@@ -639,7 +639,7 @@ gpgol_folder_revert (LPDISPATCH mapifolderobj)
     }
   folder = NULL;
   hr = unknown->QueryInterface (IID_IMAPIFolder, (void**)&folder);
-  unknown->Release ();
+  gpgol_release (unknown);
   if (hr != S_OK || !folder)
     {
       log_error ("%s:%s: error getting IMAPIFolder: hr=%#lx",
@@ -664,7 +664,7 @@ gpgol_folder_revert (LPDISPATCH mapifolderobj)
       return -1;
     }
   unknown = get_oom_iunknown (disp, "MAPIOBJECT");
-  disp->Release ();
+  gpgol_release (disp);
   if (!unknown)
     {
       log_error ("%s:%s: error getting Session.MAPIOBJECT", SRCNAME, __func__);
@@ -673,7 +673,7 @@ gpgol_folder_revert (LPDISPATCH mapifolderobj)
     }
   session = NULL;
   hr = unknown->QueryInterface (IID_IMAPISession, (void**)&session);
-  unknown->Release ();
+  gpgol_release (unknown);
   if (hr != S_OK || !session)
     {
       log_error ("%s:%s: error getting IMAPISession: hr=%#lx",
@@ -688,7 +688,7 @@ gpgol_folder_revert (LPDISPATCH mapifolderobj)
   if (!store_entryid)
     {
       log_error ("%s:%s: PR_STORE_ENTRYID missing\n",  SRCNAME, __func__);
-      session->Release ();
+      gpgol_release (session);
       ul_release (folder, __func__, __LINE__);
       return -1;
     }
@@ -701,7 +701,7 @@ gpgol_folder_revert (LPDISPATCH mapifolderobj)
     {
       log_error ("%s:%s: OpenMsgStore failed: hr=%#lx\n", 
                  SRCNAME, __func__, hr);
-      session->Release ();
+      gpgol_release (session);
       ul_release (folder, __func__, __LINE__);
       return -1;
     }
@@ -714,7 +714,7 @@ gpgol_folder_revert (LPDISPATCH mapifolderobj)
       log_error ("%s:%s: error getting contents table: hr=%#lx\n", 
                  SRCNAME, __func__, hr);
       ul_release (mdb, __func__, __LINE__);
-      session->Release ();
+      gpgol_release (session);
       ul_release (folder, __func__, __LINE__);
       return -1;
     }
@@ -725,9 +725,9 @@ gpgol_folder_revert (LPDISPATCH mapifolderobj)
     {
       log_error ("%s:%s: error setting contents table column: hr=%#lx\n", 
                  SRCNAME, __func__, hr);
-      contents->Release ();
+      gpgol_release (contents);
       ul_release (mdb, __func__, __LINE__);
-      session->Release ();
+      gpgol_release (session);
       ul_release (folder, __func__, __LINE__);
       return -1;
     }
@@ -776,7 +776,7 @@ gpgol_folder_revert (LPDISPATCH mapifolderobj)
             log_debug ("%s:%s: this row has now message object (type=%d)"
                        " - skipped\n",  SRCNAME, __func__, (int)mtype);
 
-          message->Release ();
+          gpgol_release (message);
         }
       FreeProws (rows);
       rows = NULL;
@@ -790,9 +790,9 @@ gpgol_folder_revert (LPDISPATCH mapifolderobj)
       rows = NULL;
     }
 
-  contents->Release ();
+  gpgol_release (contents);
   ul_release (mdb, __func__, __LINE__);
-  session->Release ();
+  gpgol_release (session);
   ul_release (folder, __func__, __LINE__);
   return 0;
 }
diff --git a/src/ribbon-callbacks.cpp b/src/ribbon-callbacks.cpp
index 452aae6..0b547f4 100644
--- a/src/ribbon-callbacks.cpp
+++ b/src/ribbon-callbacks.cpp
@@ -592,7 +592,7 @@ verify_mime (LPDISPATCH mailitem)
       return 0;
     }
   ret = message_incoming_handler (message, NULL, true /*force */);
-  message->Release ();
+  gpgol_release (message);
 
   return ret;
 }
@@ -902,7 +902,7 @@ do_reader_action (LPDISPATCH ctrl, int flags)
   xfree (senderAddr);
   xfree (subject);
   if (tmpstream)
-    tmpstream->Release();
+    gpgol_release (tmpstream);
 
   return S_OK;
 }
@@ -982,7 +982,7 @@ getIcon (int id, VARIANT* result)
           if (CreateStreamOnHGlobal (hBuffer, FALSE, &pStream) == S_OK)
             {
               pbitmap = Gdiplus::Bitmap::FromStream (pStream);
-              pStream->Release();
+              gpgol_release (pStream);
               if (!pbitmap || pbitmap->GetHBITMAP (0, &pdesc.bmp.hbitmap))
                 {
                   log_error ("%s:%s: failed to get PNG.",
diff --git a/src/util.h b/src/util.h
index 6eccb35..b20f0bc 100644
--- a/src/util.h
+++ b/src/util.h
@@ -97,14 +97,17 @@ void log_window_hierarchy (HWND window, const char *fmt,
 #define log_oom if (opt.enable_debug & DBG_OOM) log_debug
 #define log_oom_extra if (opt.enable_debug & DBG_OOM_EXTRA) log_debug
 #define gpgol_release(X) \
+{ \
   if (X && opt.enable_debug & DBG_OOM_EXTRA) \
     { \
-      log_debug ("Releasing: %p \n", X); \
       log_debug ("%s:%s: Object: %p released ref: %lu \n", \
                  SRCNAME, __func__, X, X->Release()); \
     } \
   else if (X) \
-    X->Release();
+    { \
+      X->Release(); \
+    } \
+}
 
 const char *log_srcname (const char *s);
 #define SRCNAME log_srcname (__FILE__)

commit 6b5acfcb5f89e4a460e859aa42b347e4474e96cc
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Aug 15 11:55:17 2016 +0200

    WIP release debug
    
    * src/attachment.cpp: New.
    * src/gpgoladdin.cpp: New.
    * src/mail.cpp: New.
    * src/mailitem-events.cpp: New.
    * src/mapihelp.cpp: New.
    * src/oomhelp.cpp: New.
    * src/revert.cpp: New.
    * src/ribbon-callbacks.cpp: New.
    * src/util.h: New.

diff --git a/src/attachment.cpp b/src/attachment.cpp
index 87071dc..0ccf2d9 100644
--- a/src/attachment.cpp
+++ b/src/attachment.cpp
@@ -237,7 +237,7 @@ do_crypt_mapi (LPATTACH att, bool encrypt)
 done:
   if (symenc)
     symenc_close (symenc);
-  RELDISP (stream);
+  gpgol_release (stream);
 
   return rc;
 }
@@ -322,8 +322,8 @@ do_crypt (LPDISPATCH mailitem, bool protect)
 
 done:
 
-  RELDISP (message);
-  RELDISP (attachments);
+  gpgol_release (message);
+  gpgol_release (attachments);
   return err;
 }
 
diff --git a/src/gpgoladdin.cpp b/src/gpgoladdin.cpp
index 28fe160..7c1ba7f 100644
--- a/src/gpgoladdin.cpp
+++ b/src/gpgoladdin.cpp
@@ -191,7 +191,7 @@ GpgolAddin::~GpgolAddin (void)
     }
   log_debug ("%s:%s: Releasing Application Event Sink;",
              SRCNAME, __func__);
-  RELDISP (m_applicationEventSink);
+  gpgol_release (m_applicationEventSink);
 
   engine_deinit ();
   write_options ();
diff --git a/src/mail.cpp b/src/mail.cpp
index c1cc386..1030c77 100644
--- a/src/mail.cpp
+++ b/src/mail.cpp
@@ -85,7 +85,7 @@ Mail::Mail (LPDISPATCH mailitem) :
          and just release the Mail item. */
       log_error ("%s:%s: Failed to install MailItemEvents sink.",
                  SRCNAME, __func__);
-      mailitem->Release ();
+      gpgol_release(mailitem);
       return;
     }
   g_mail_map.insert (std::pair<LPDISPATCH, Mail *> (mailitem, this));
@@ -118,7 +118,7 @@ Mail::process_message ()
 
   log_debug ("%s:%s: incoming handler status: %i",
              SRCNAME, __func__, err);
-  message->Release ();
+  gpgol_release (message);
   return 0;
 }
 
@@ -127,7 +127,7 @@ Mail::~Mail()
   std::map<LPDISPATCH, Mail *>::iterator it;
 
   detach_MailItemEvents_sink (m_event_sink);
-  m_event_sink->Release ();
+  gpgol_release(m_event_sink);
 
   it = g_mail_map.find(m_mailitem);
   if (it != g_mail_map.end())
@@ -135,7 +135,7 @@ Mail::~Mail()
       g_mail_map.erase (it);
     }
 
-  m_mailitem->Release ();
+  gpgol_release(m_mailitem);
 }
 
 Mail *
@@ -223,7 +223,7 @@ Mail::insert_plaintext ()
   /* Invalidate UI to set the correct sig status. */
   gpgoladdin_invalidate_ui ();
 done:
-  RELDISP (base_message);
+  gpgol_release (base_message);
   return err;
 }
 
@@ -269,7 +269,7 @@ Mail::do_crypto ()
     }
   log_debug ("%s:%s: Status: %i",
              SRCNAME, __func__, err);
-  message->Release ();
+  gpgol_release (message);
   m_crypt_successful = !err;
   return err;
 }
@@ -286,7 +286,7 @@ Mail::needs_crypto ()
       return false;
     }
   ret = get_gpgol_draft_info_flags (message);
-  message->Release ();
+  gpgol_release(message);
   return ret;
 }
 
@@ -323,7 +323,7 @@ Mail::update_sender ()
   if (sender)
     {
       m_sender = get_oom_string (sender, "SmtpAddress");
-      RELDISP (sender);
+      gpgol_release (sender);
       return 0;
     }
   /* Fallback to Sender object */
@@ -331,7 +331,7 @@ Mail::update_sender ()
   if (sender)
     {
       m_sender = get_pa_string (sender, PR_SMTP_ADDRESS_DASL);
-      RELDISP (sender);
+      gpgol_release (sender);
       return 0;
     }
   /* We don't have s sender object or SendUsingAccount,
@@ -340,7 +340,7 @@ Mail::update_sender ()
   if (sender)
     {
       m_sender = get_pa_string (sender, PR_SMTP_ADDRESS_DASL);
-      RELDISP (sender);
+      gpgol_release (sender);
       return 0;
     }
 
@@ -455,7 +455,7 @@ Mail::is_smime ()
       xfree (proto);
       xfree (ct);
     }
-  RELDISP (message);
+  gpgol_release (message);
   m_is_smime_checked  = true;
   return m_is_smime;
 }
diff --git a/src/mailitem-events.cpp b/src/mailitem-events.cpp
index 6919b14..b376c53 100644
--- a/src/mailitem-events.cpp
+++ b/src/mailitem-events.cpp
@@ -156,7 +156,7 @@ EVENT_SINK_INVOKE(MailItemEvents)
               draft_flags += 2;
             }
           set_gpgol_draft_info_flags (message, draft_flags);
-          RELDISP (message);
+          gpgol_release (message);
         }
       case BeforeRead:
         {
diff --git a/src/mapihelp.cpp b/src/mapihelp.cpp
index e916209..25ef089 100644
--- a/src/mapihelp.cpp
+++ b/src/mapihelp.cpp
@@ -1539,7 +1539,7 @@ resolve_ex_from_address (LPMESSAGE message)
                                MAPI_BEST_ACCESS,
                                &utype, (IUnknown**)&user);
     }
-  RELDISP (session);
+  gpgol_release (session);
 
   if (FAILED (hr))
     {
diff --git a/src/oomhelp.cpp b/src/oomhelp.cpp
index ae6497c..e4cb7a4 100644
--- a/src/oomhelp.cpp
+++ b/src/oomhelp.cpp
@@ -787,7 +787,7 @@ get_oom_context_window (LPDISPATCH context)
       log_debug ("%s:%s: Could not find active window",
                  SRCNAME, __func__);
     }
-  RELDISP (actExplorer);
+  gpgol_release (actExplorer);
   return ret;
 }
 
@@ -841,7 +841,7 @@ int set_pa_variant (LPDISPATCH pDisp, const char *dasl_id, VARIANT *value)
                                  DISPATCH_METHOD, &dispparams,
                                  &rVariant, &execpinfo, &argErr);
   SysFreeString (b_property);
-  RELDISP (propertyAccessor);
+  gpgol_release (propertyAccessor);
   if (hr != S_OK)
     {
       log_debug ("%s:%s: error: invoking SetProperty p=%p vt=%d"
@@ -909,7 +909,7 @@ int get_pa_variant (LPDISPATCH pDisp, const char *dasl_id, VARIANT *rVariant)
                                  DISPATCH_METHOD, &dispparams,
                                  rVariant, &execpinfo, &argErr);
   SysFreeString (b_property);
-  RELDISP (propertyAccessor);
+  gpgol_release (propertyAccessor);
   if (hr != S_OK)
     {
       log_debug ("%s:%s: error: invoking GetProperty p=%p vt=%d"
@@ -1114,7 +1114,7 @@ add_oom_attachment (LPDISPATCH disp, wchar_t* inFileW)
 
   SysFreeString (inFileB);
   VariantClear (&vtResult);
-  RELDISP (attachments);
+  gpgol_release (attachments);
 
   return hr == S_OK ? 0 : -1;
 }
diff --git a/src/revert.cpp b/src/revert.cpp
index abf25f2..103b325 100644
--- a/src/revert.cpp
+++ b/src/revert.cpp
@@ -394,7 +394,7 @@ gpgol_mailitem_revert (LPDISPATCH mailitem)
               if (!body)
                 {
                   log_error ("%s:%s: Error: %i", SRCNAME, __func__, __LINE__);
-                  RELDISP (attachment);
+                  gpgol_release (attachment);
                   goto done;
                 }
               log_debug ("%s:%s: Restoring pgp-body.",
@@ -403,7 +403,7 @@ gpgol_mailitem_revert (LPDISPATCH mailitem)
                 {
                   log_error ("%s:%s: Error: %i", SRCNAME, __func__, __LINE__);
                   xfree (body);
-                  RELDISP (attachment);
+                  gpgol_release (attachment);
                   goto done;
                 }
               body_restored = 1;
@@ -591,11 +591,11 @@ done:
 
   for (i = 0; i < del_cnt; i++)
     {
-      RELDISP (to_delete[i]);
+      gpgol_release (to_delete[i]);
     }
 
   xfree (to_delete);
-  RELDISP (attachments);
+  gpgol_release (attachments);
   xfree (msgcls);
 
   if (!result && finalize_mapi (message))
@@ -605,7 +605,7 @@ done:
       result = -1;
     }
 
-  RELDISP (message);
+  gpgol_release (message);
 
   return result;
 }
diff --git a/src/ribbon-callbacks.cpp b/src/ribbon-callbacks.cpp
index c4f5c22..452aae6 100644
--- a/src/ribbon-callbacks.cpp
+++ b/src/ribbon-callbacks.cpp
@@ -460,13 +460,13 @@ failure:
     log_debug ("%s:%s: failed rc=%d (%s) <%s>", SRCNAME, __func__, rc,
                gpg_strerror (rc), gpg_strsource (rc));
   engine_cancel (filter);
-  RELDISP(wordEditor);
-  RELDISP(application);
-  RELDISP(selection);
-  RELDISP(sender);
-  RELDISP(recipients);
-  RELDISP(mailItem);
-  RELDISP(tmpstream);
+  gpgol_release(wordEditor);
+  gpgol_release(application);
+  gpgol_release(selection);
+  gpgol_release(sender);
+  gpgol_release(recipients);
+  gpgol_release(mailItem);
+  gpgol_release(tmpstream);
   xfree (plaintext);
   xfree (senderAddr);
   if (recipientAddrs)
@@ -552,7 +552,7 @@ decryptAttachments (LPDISPATCH ctrl)
                                     DISPATCH_METHOD, &saveParams,
                                     NULL, NULL, NULL);
         SysFreeString (saveParams.rgvarg[0].bstrVal);
-        RELDISP (attachmentObj);
+        gpgol_release (attachmentObj);
         if (FAILED(hr))
           {
             int j;
@@ -560,11 +560,11 @@ decryptAttachments (LPDISPATCH ctrl)
                        SRCNAME, __func__, (unsigned int) hr);
             for (j = 0; j < i; j++)
               xfree (filenames[j]);
-            RELDISP (attachmentSelection);
+            gpgol_release (attachmentSelection);
             return hr;
           }
       }
-    RELDISP (attachmentSelection);
+    gpgol_release (attachmentSelection);
     err = op_assuan_start_decrypt_files (curWindow, filenames);
     for (i = 0; i < attachmentCount; i++)
       xfree (filenames[i]);
@@ -739,7 +739,7 @@ do_reader_action (LPDISPATCH ctrl, int flags)
           /* Not SMTP, fall back to try getting the property. */
           LPDISPATCH sender = get_oom_object (mailItem, "Sender");
           senderAddr = get_pa_string (sender, PR_SMTP_ADDRESS_DASL);
-          RELDISP (sender);
+          gpgol_release (sender);
         }
       xfree (addrType);
     }
@@ -749,7 +749,7 @@ do_reader_action (LPDISPATCH ctrl, int flags)
          in this case use the current address */
       LPDISPATCH sender = get_oom_object (mailItem, "Session.CurrentUser");
       senderAddr = get_pa_string (sender, PR_SMTP_ADDRESS_DASL);
-      RELDISP (sender);
+      gpgol_release (sender);
     }
 
   /* Determine the protocol based on the content */
@@ -894,10 +894,10 @@ do_reader_action (LPDISPATCH ctrl, int flags)
     log_debug ("%s:%s: failed rc=%d (%s) <%s>", SRCNAME, __func__, rc,
                gpg_strerror (rc), gpg_strsource (rc));
   engine_cancel (filter);
-  RELDISP (mailItem);
-  RELDISP (selection);
-  RELDISP (wordEditor);
-  RELDISP (wordApplication);
+  gpgol_release (mailItem);
+  gpgol_release (selection);
+  gpgol_release (wordEditor);
+  gpgol_release (wordApplication);
   xfree (encData);
   xfree (senderAddr);
   xfree (subject);
@@ -1204,9 +1204,9 @@ failure:
   xfree (fileToEncryptW);
   xfree (attachName);
   xfree (subject);
-  RELDISP (mailItem);
-  RELDISP (sender);
-  RELDISP (recipients);
+  gpgol_release (mailItem);
+  gpgol_release (sender);
+  gpgol_release (recipients);
 
   if (hFile)
     CloseHandle (hFile);
@@ -1331,9 +1331,9 @@ mark_mime_action (LPDISPATCH ctrl, int flags, bool is_explorer)
   rc = S_OK;
 
 done:
-  RELDISP (context);
-  RELDISP (mailitem);
-  RELDISP (message);
+  gpgol_release (context);
+  gpgol_release (mailitem);
+  gpgol_release (message);
 
   return rc;
 }
@@ -1395,9 +1395,9 @@ HRESULT get_crypt_pressed (LPDISPATCH ctrl, int flags, VARIANT *result,
                                                         VARIANT_FALSE;
 
 done:
-  RELDISP (context);
-  RELDISP (mailitem);
-  RELDISP (message);
+  gpgol_release (context);
+  gpgol_release (mailitem);
+  gpgol_release (message);
 
   return S_OK;
 }
@@ -1471,9 +1471,9 @@ HRESULT get_crypt_status (LPDISPATCH ctrl, int flags, VARIANT *result)
     }
 
 done:
-  RELDISP (context);
-  RELDISP (mailitem);
-  RELDISP (message);
+  gpgol_release (context);
+  gpgol_release (mailitem);
+  gpgol_release (message);
 
   return S_OK;
 }
diff --git a/src/util.h b/src/util.h
index c8a44db..6eccb35 100644
--- a/src/util.h
+++ b/src/util.h
@@ -96,6 +96,15 @@ void log_window_hierarchy (HWND window, const char *fmt,
 
 #define log_oom if (opt.enable_debug & DBG_OOM) log_debug
 #define log_oom_extra if (opt.enable_debug & DBG_OOM_EXTRA) log_debug
+#define gpgol_release(X) \
+  if (X && opt.enable_debug & DBG_OOM_EXTRA) \
+    { \
+      log_debug ("Releasing: %p \n", X); \
+      log_debug ("%s:%s: Object: %p released ref: %lu \n", \
+                 SRCNAME, __func__, X, X->Release()); \
+    } \
+  else if (X) \
+    X->Release();
 
 const char *log_srcname (const char *s);
 #define SRCNAME log_srcname (__FILE__)

commit 683e4136aca4091a8e616c3364cff160a335f6ba
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Aug 15 11:51:07 2016 +0200

    Enable ASLR, DEP and Fortify Source
    
    * configure.ac (HARDENING): Add hardening flags.
    
    --
    As plugins without DEP and ASLR lower the security of the
    parent application if it is buggy we better enable these for
    GpgOL.
    
    GnuPG-Bug-Id: 2366

diff --git a/configure.ac b/configure.ac
index 3699875..709e427 100644
--- a/configure.ac
+++ b/configure.ac
@@ -201,6 +201,16 @@ fi
 if test "$GCC" = yes; then
     CFLAGS="$CFLAGS -Wall -mms-bitfields -fno-strict-aliasing"
     CXXFLAGS="$CXXFLAGS -Wall -mms-bitfields -fno-strict-aliasing"
+    # Hardening flags
+    # Stack protection
+    # -fstack-protector-all -Wstack-protector --param ssp-buffer-size=4
+    # causes gpgol not to be loaded by Outlook due to a runtime error.
+    # This needs to be analysed but could be an incompatibility between
+    # gcc's stack protection and COM / Outlook system calls.
+    HARDENING="-Wl,--dynamicbase -Wl,--nxcompat -fno-exceptions -D_FORTIFY_SOURCE=2 -O0"
+    CFLAGS="$CFLAGS $HARDENING"
+    CXXFLAGS="$CXXFLAGS $HARDENING"
+
     if test "$USE_MAINTAINER_MODE" = "yes"; then
         CFLAGS="$CFLAGS -Werror -Wcast-align -Wshadow -Wstrict-prototypes"
         CFLAGS="$CFLAGS -Wformat-security"

commit 037a5a7edf36038b28d2fb2bdb1e7ffeb6cb1756
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Aug 15 11:12:21 2016 +0200

    Fix missing field initializers and enable warning
    
    * configure.ac (CXXFLAGS, CFLAGS): Enable Wmissing-field-initalizers.
    * src/attachment.cpp (do_crypt_stream): Fix init.
    * src/main.c (write_options): Fix init.
    * src/windowmessages.cpp (do_in_ui_thread): Fix init.

diff --git a/configure.ac b/configure.ac
index 9b5cbad..3699875 100644
--- a/configure.ac
+++ b/configure.ac
@@ -203,21 +203,11 @@ if test "$GCC" = yes; then
     CXXFLAGS="$CXXFLAGS -Wall -mms-bitfields -fno-strict-aliasing"
     if test "$USE_MAINTAINER_MODE" = "yes"; then
         CFLAGS="$CFLAGS -Werror -Wcast-align -Wshadow -Wstrict-prototypes"
-        CFLAGS="$CFLAGS -Wno-format-y2k -Wformat-security"
+        CFLAGS="$CFLAGS -Wformat-security"
         CFLAGS="$CFLAGS -W -Wno-sign-compare"
         CXXFLAGS="$CXXFLAGS -Werror -Wcast-align -Wshadow"
-        CXXFLAGS="$CXXFLAGS -Wno-format-y2k -Wformat-security"
+        CXXFLAGS="$CXXFLAGS -Wformat-security"
         CXXFLAGS="$CXXFLAGS -W -Wno-sign-compare"
-        AC_MSG_CHECKING([if gcc supports -Wno-missing-field-initializers])
-        _gcc_cflags_save=$CFLAGS
-        CFLAGS="-Wno-missing-field-initializers"
-        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_mfi=yes,_gcc_mfi=no)
-        AC_MSG_RESULT($_gcc_mfi)
-        CFLAGS=$_gcc_cflags_save;
-        if test x"$_gcc_mfi" = xyes ; then
-          CFLAGS="$CFLAGS -Wno-missing-field-initializers"
-          CXXFLAGS="$CXXFLAGS -Wno-missing-field-initializers"
-        fi
     fi
 
     AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign])
diff --git a/src/attachment.cpp b/src/attachment.cpp
index c93a3a4..87071dc 100644
--- a/src/attachment.cpp
+++ b/src/attachment.cpp
@@ -75,9 +75,9 @@ do_crypt_stream (LPSTREAM stream, symenc_t symenc, bool encrypt)
      stream returns E_NOT_IMPLMENTED for that :-)
      So we manually track the read and writepos. Read is offset
      at 16 because of the GpgOL message. */
-  LARGE_INTEGER readpos = {0},
-                writepos = {0};
-  ULARGE_INTEGER new_size = {0};
+  LARGE_INTEGER readpos = {0, 0},
+                writepos = {0, 0};
+  ULARGE_INTEGER new_size = {0, 0};
 
   if (!encrypt)
     {
diff --git a/src/main.c b/src/main.c
index d30f74b..12321f3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -736,22 +736,22 @@ write_options (void)
     int  value;
     char *s_val;
   } table[] = {
-    {"enableSmime",              0, opt.enable_smime},
+    {"enableSmime",              0, opt.enable_smime, NULL},
 /*     {"defaultProtocol",          3, opt.default_protocol}, */
-    {"encryptDefault",           0, opt.encrypt_default},
-    {"signDefault",              0, opt.sign_default},
-    {"previewDecrypt",           0, opt.preview_decrypt},
-    {"encodingFormat",           1, opt.enc_format},
+    {"encryptDefault",           0, opt.encrypt_default, NULL},
+    {"signDefault",              0, opt.sign_default, NULL},
+    {"previewDecrypt",           0, opt.preview_decrypt, NULL},
+    {"encodingFormat",           1, opt.enc_format, NULL},
     {"logFile",                  2, 0, logfile},
     {"defaultKey",               2, 0, opt.default_key},
-    {"enableDefaultKey",         0, opt.enable_default_key},
-    {"preferHtml",               0, opt.prefer_html},
-    {"gitCommit",                4, opt.git_commit},
-    {"formsRevision",            1, opt.forms_revision},
-    {"announceNumber",           1, opt.announce_number},
-    {"bodyAsAttachment",         0, opt.body_as_attachment},
-    {"mimeUI", MIME_UI_DEFAULT, opt.mime_ui},
-    {NULL, 0}
+    {"enableDefaultKey",         0, opt.enable_default_key, NULL},
+    {"preferHtml",               0, opt.prefer_html, NULL},
+    {"gitCommit",                4, opt.git_commit, NULL},
+    {"formsRevision",            1, opt.forms_revision, NULL},
+    {"announceNumber",           1, opt.announce_number, NULL},
+    {"bodyAsAttachment",         0, opt.body_as_attachment, NULL},
+    {"mimeUI", MIME_UI_DEFAULT, opt.mime_ui, NULL},
+    {NULL, 0, 0, NULL}
   };
   char buf[32];
   int rc, i;
diff --git a/src/windowmessages.cpp b/src/windowmessages.cpp
index ce1afa5..e0c95cd 100644
--- a/src/windowmessages.cpp
+++ b/src/windowmessages.cpp
@@ -99,7 +99,7 @@ send_msg_to_ui_thread (wm_ctx_t *ctx)
 int
 do_in_ui_thread (gpgol_wmsg_type type, void *data)
 {
-  wm_ctx_t ctx = {0};
+  wm_ctx_t ctx = {NULL, UNKNOWN, 0};
   ctx.wmsg_type = type;
   ctx.data = data;
   if (send_msg_to_ui_thread (&ctx))

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

Summary of changes:
 configure.ac                 | 24 ++++++------
 src/attached-file-events.cpp |  6 +--
 src/attachment.cpp           | 22 +++++------
 src/attic.c                  |  4 +-
 src/display.cpp              | 36 ++++++++---------
 src/eventsink.h              | 16 ++++----
 src/explorers.cpp            | 16 ++++----
 src/ext-commands.cpp         | 12 +++---
 src/gpgoladdin.cpp           |  2 +-
 src/inspectors.cpp           | 64 +++++++++++++++---------------
 src/item-events.cpp          |  4 +-
 src/mail.cpp                 | 22 +++++------
 src/mailitem-events.cpp      |  4 +-
 src/mailitem.cpp             |  2 +-
 src/main.c                   | 26 ++++++-------
 src/mapihelp.cpp             | 92 ++++++++++++++++++++++----------------------
 src/message-events.cpp       | 12 +++---
 src/message.cpp              | 22 +++++------
 src/mlang-charset.cpp        | 11 +++---
 src/olflange.cpp             | 18 ++++-----
 src/oomhelp.cpp              | 34 ++++++++--------
 src/oomhelp.h                |  3 --
 src/revert.cpp               | 34 ++++++++--------
 src/ribbon-callbacks.cpp     | 62 ++++++++++++++---------------
 src/util.h                   | 12 ++++++
 src/windowmessages.cpp       |  2 +-
 26 files changed, 286 insertions(+), 276 deletions(-)


hooks/post-receive
-- 
GnuPG extension for MS Outlook
http://git.gnupg.org




More information about the Gnupg-commits mailing list