sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 3f9d7d9d5aa23786a70b8a442ac0a98fe53512d0
parent 99e95dd3721080594acc9a1ab2d2a3623153775a
Author: Sascha Silbe <sascha-pgp@silbe.org>
Date:   Thu,  1 Jul 2010 13:48:13 +0000

parse_header: don't use empty or invalid Message-ID header

If Message-ID contains only invalid characters (or none at all),
sanitize_message_id will return an empty string. As Message.parse_header
only checked for header existance, not validity, sup-dump could produce
a dump file that sup-sync would choke on.

We now fall back to a fake id for both missing and invalid Message-ID
headers.

Diffstat:
M lib/sup/message.rb | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/lib/sup/message.rb b/lib/sup/message.rb
@@ -78,14 +78,15 @@ class Message
   def parse_header encoded_header
     header = SavingHash.new { |k| decode_header_field encoded_header[k] }
 
-    @id = if header["message-id"]
+    @id = ''
+    if header["message-id"]
       mid = header["message-id"] =~ /<(.+?)>/ ? $1 : header["message-id"]
-      sanitize_message_id mid
-    else
-      id = "sup-faked-" + Digest::MD5.hexdigest(raw_header)
-      from = header["from"]
+      @id = sanitize_message_id mid
+    end
+    if (not @id.include? '@') || @id.length < 6
+      @id = "sup-faked-" + Digest::MD5.hexdigest(raw_header)
+      #from = header["from"]
       #debug "faking non-existent message-id for message from #{from}: #{id}"
-      id
     end
 
     @from = Person.from_address(if header["from"]