[git] GpgOL - branch, master, updated. gpgol-2.3.2-28-g815c500

by Andre Heinecke cvs at cvs.gnupg.org
Thu Feb 21 15:17:08 CET 2019


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  815c500864db46e7bc4a9f5d4b8ccd942e60fd15 (commit)
      from  36c42a1333166ac8ec1a276a6d1708aaf7e6d06e (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 815c500864db46e7bc4a9f5d4b8ccd942e60fd15
Author: Andre Heinecke <aheinecke at gnupg.org>
Date:   Thu Feb 21 15:16:49 2019 +0100

    Add minimalistic protected-headers support
    
    * src/mail.cpp (Mail::parsing_done): Update subject if one
    was taken from a protected header.
    * src/mailitem-events.cpp (prop_blacklist): Ignore subject related
    changes.
    * src/mimedataprovider.cpp (t2body): Handle protected headers.
    (MimeDataProvider::finalize): Convert subject to a string.
    (MimeDataProvider::get_internal_subject): New.
    * src/parsecontroller.cpp (ParseController::get_internal_subject):
    New accessor.
    * src/parsecontroller.h, src/mimedataprovider.h: Update accordingly.
    
    --
    This is still bad but a little less bad then it was before.
    We still ignore to and from from the protected headers but at
    least we show the subject now.1

diff --git a/src/mail.cpp b/src/mail.cpp
index 45e252e..db137b1 100644
--- a/src/mail.cpp
+++ b/src/mail.cpp
@@ -1495,6 +1495,12 @@ Mail::parsing_done()
   m_decrypt_result = m_parser->decrypt_result ();
   m_verify_result = m_parser->verify_result ();
 
+  const auto subject = m_parser->get_internal_subject ();
+  if (!subject.empty ())
+    {
+      put_oom_string (m_mailitem, "Subject", subject.c_str ());
+    }
+
   m_crypto_flags = 0;
   if (!m_decrypt_result.isNull())
     {
diff --git a/src/mailitem-events.cpp b/src/mailitem-events.cpp
index fa12d88..5be58e7 100644
--- a/src/mailitem-events.cpp
+++ b/src/mailitem-events.cpp
@@ -47,6 +47,8 @@ const wchar_t *prop_blacklist[] = {
   L"OutlookInternalVersion",
   L"ReceivedTime",
   L"InternetCodepage",
+  L"ConversationIndex",
+  L"Subject",
   NULL };
 
 typedef enum
diff --git a/src/mimedataprovider.cpp b/src/mimedataprovider.cpp
index 25e576c..6afcdcd 100644
--- a/src/mimedataprovider.cpp
+++ b/src/mimedataprovider.cpp
@@ -186,6 +186,7 @@ t2body (MimeDataProvider *provider, rfc822parse_t msg)
   char *p;
   int is_text = 0;
   int is_text_attachment = 0;
+  int is_protected_headers = 0;
   char *filename = NULL;
   char *cid = NULL;
   char *charset = NULL;
@@ -341,6 +342,15 @@ t2body (MimeDataProvider *provider, rfc822parse_t msg)
   else if (!strcmp (ctmain, "text"))
     {
       is_text = !strcmp (ctsub, "html")? 2:1;
+      is_protected_headers = (!strcmp (ctsub, "rfc822-headers") &&
+                              rfc822parse_query_parameter (field,
+                                                    "protected-headers", -1));
+      if (is_protected_headers)
+        {
+          log_data ("%s:%s: Found protected headers.",
+                           SRCNAME, __func__);
+          provider->m_had_protected_headers = true;
+        }
     }
   else if (ctx->nesting_level == 1 && !provider->signature()
            && !strcmp (ctmain, "application")
@@ -383,14 +393,18 @@ t2body (MimeDataProvider *provider, rfc822parse_t msg)
         }
     }
   rfc822parse_release_field (field); /* (Content-type) */
-  ctx->in_data = 1;
+  if (!is_protected_headers)
+    {
+      ctx->in_data = 1;
+    }
 
   log_data ("%s:%s: this body: nesting=%d partno=%d is_text=%d"
-                   " charset=\"%s\"\n body_seen=%d is_text_attachment=%d",
+                   " charset=\"%s\"\n body_seen=%d is_text_attachment=%d"
+                   " is_protected_headers=%d",
                    SRCNAME, __func__,
                    ctx->nesting_level, ctx->part_counter, is_text,
                    ctx->mimestruct_cur->charset?ctx->mimestruct_cur->charset:"",
-                   ctx->body_seen, is_text_attachment);
+                   ctx->body_seen, is_text_attachment, is_protected_headers);
 
   /* If this is a text part, decide whether we treat it as one
      of our bodies.
@@ -1077,6 +1091,25 @@ MimeDataProvider::create_attachment()
 void MimeDataProvider::finalize ()
 {
   TSTART;
+
+  if (m_had_protected_headers)
+    {
+      const char *subject = rfc822parse_get_field (m_mime_ctx->msg,
+                                                   "Subject", -1,
+                                                   nullptr);
+      if (subject)
+        {
+          log_debug ("%s:%s: Found subject %s", SRCNAME, __func__, subject);
+          if (strlen (subject) <= strlen ("Subject: "))
+            {
+              STRANGEPOINT;
+            }
+          else
+            {
+              m_internal_subject = subject + strlen ("Subject: ");
+            }
+        }
+    }
   if (m_rawbuf.size ())
     {
       m_rawbuf += "\r\n";
@@ -1115,3 +1148,9 @@ const std::string &MimeDataProvider::get_body_charset() const
   TSTART;
   TRETURN m_body_charset;
 }
+
+const std::string &MimeDataProvider::get_internal_subject () const
+{
+  TSTART;
+  TRETURN m_internal_subject;
+}
diff --git a/src/mimedataprovider.h b/src/mimedataprovider.h
index 40e1c18..17b5549 100644
--- a/src/mimedataprovider.h
+++ b/src/mimedataprovider.h
@@ -116,11 +116,14 @@ public:
     {return m_attachments;}
   const std::string &get_html_charset() const;
   const std::string &get_body_charset() const;
+  const std::string &get_internal_subject() const;
 
   void set_has_html_body(bool value) {m_has_html_body = value;}
 
   /* Finalize the bodys */
   void finalize ();
+
+  bool m_had_protected_headers;
 private:
 #ifdef HAVE_W32_SYSTEM
   /* Collect the data from mapi. */
@@ -154,5 +157,7 @@ private:
   bool m_has_html_body;
   /* Collect everything */
   bool m_collect_everything;
+  /* Internal Protected Headers subject */
+  std::string m_internal_subject;
 };
 #endif // MIMEDATAPROVIDER_H
diff --git a/src/parsecontroller.cpp b/src/parsecontroller.cpp
index 0a97fdb..872f7e1 100644
--- a/src/parsecontroller.cpp
+++ b/src/parsecontroller.cpp
@@ -696,3 +696,14 @@ ParseController::get_attachments() const
       TRETURN std::vector<std::shared_ptr<Attachment> >();
     }
 }
+
+std::string
+ParseController::get_internal_subject() const
+{
+  TSTART;
+  if (m_outputprovider)
+    {
+      TRETURN m_outputprovider->get_internal_subject ();
+    }
+  TRETURN std::string();
+}
diff --git a/src/parsecontroller.h b/src/parsecontroller.h
index d88ff19..3b7d456 100644
--- a/src/parsecontroller.h
+++ b/src/parsecontroller.h
@@ -101,6 +101,8 @@ public:
   void setAutocryptInfo (const autocrypt_s & info)
   { m_autocrypt_info = info; }
 
+  std::string get_internal_subject() const;
+
 private:
   /* State variables */
   MimeDataProvider *m_inputprovider;

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

Summary of changes:
 src/mail.cpp             |  6 ++++++
 src/mailitem-events.cpp  |  2 ++
 src/mimedataprovider.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++---
 src/mimedataprovider.h   |  5 +++++
 src/parsecontroller.cpp  | 11 +++++++++++
 src/parsecontroller.h    |  2 ++
 6 files changed, 68 insertions(+), 3 deletions(-)


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




More information about the Gnupg-commits mailing list