Archive of RubyForge sup-devel mailing list
 help / color / mirror / Atom feed
From: Rich Lane <rlane@club.cc.cmu.edu>
To: sup-devel@rubyforge.org
Subject: [sup-devel] [PATCH 09/10] use header from the RMail::Message in Message#parse_header
Date: Thu, 31 Dec 2009 15:36:57 -0800	[thread overview]
Message-ID: <1262302618-20503-10-git-send-email-rlane@club.cc.cmu.edu> (raw)
In-Reply-To: <1262302618-20503-9-git-send-email-rlane@club.cc.cmu.edu>

---
 lib/sup/message.rb |   24 ++++++++++++++----------
 1 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/lib/sup/message.rb b/lib/sup/message.rb
index f3ac874..519243a 100644
--- a/lib/sup/message.rb
+++ b/lib/sup/message.rb
@@ -31,6 +31,7 @@ class Message
   MAX_SIG_DISTANCE = 15 # lines from the end
   DEFAULT_SUBJECT = ""
   DEFAULT_SENDER = "(missing sender)"
+  MAX_HEADER_VALUE_SIZE = 4096
 
   attr_reader :id, :date, :from, :subj, :refs, :replytos, :to, :source,
               :cc, :bcc, :labels, :attachments, :list_address, :recipient_email, :replyto,
@@ -59,13 +60,15 @@ class Message
     #parse_header(opts[:header] || @source.load_header(@source_info))
   end
 
-  def parse_header header
-    ## forcibly decode these headers from and to the current encoding,
-    ## which serves to strip out characters that aren't displayable
-    ## (and which would otherwise be screwing up the display)
-    %w(from to subject cc bcc).each do |f|
-      header[f] = Iconv.easy_decode($encoding, $encoding, header[f]) if header[f]
-    end
+  def decode_header_field v
+    return unless v
+    return v unless v.is_a? String
+    return unless v.size < MAX_HEADER_VALUE_SIZE # avoid regex blowup on spam
+    Rfc2047.decode_to $encoding, Iconv.easy_decode($encoding, 'ASCII', v)
+  end
+
+  def parse_header encoded_header
+    header = SavingHash.new { |k| decode_header_field encoded_header[k] }
 
     @id = if header["message-id"]
       mid = header["message-id"] =~ /<(.+?)>/ ? $1 : header["message-id"]
@@ -100,7 +103,7 @@ class Message
       Time.now
     end
 
-    @subj = header.member?("subject") ? header["subject"].gsub(/\s+/, " ").gsub(/\s+$/, "") : DEFAULT_SUBJECT
+    @subj = header["subject"] ? header["subject"].gsub(/\s+/, " ").gsub(/\s+$/, "") : DEFAULT_SUBJECT
     @to = Person.from_address_list header["to"]
     @cc = Person.from_address_list header["cc"]
     @bcc = Person.from_address_list header["bcc"]
@@ -235,8 +238,9 @@ class Message
           ## bloat the index.
           ## actually, it's also the differentiation between to/cc/bcc,
           ## so i will keep this.
-          parse_header @source.load_header(@source_info)
-          message_to_chunks @source.load_message(@source_info)
+          rmsg = @source.load_message(@source_info)
+          parse_header rmsg.header
+          message_to_chunks rmsg
         rescue SourceError, SocketError => e
           warn "problem getting messages from #{@source}: #{e.message}"
           ## we need force_to_top here otherwise this window will cover
-- 
1.6.3.3

_______________________________________________
Sup-devel mailing list
Sup-devel@rubyforge.org
http://rubyforge.org/mailman/listinfo/sup-devel


  reply	other threads:[~2009-12-31 23:44 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-31 23:36 [sup-devel] Ruby 1.9 encoding fixes Rich Lane
2009-12-31 23:36 ` [sup-devel] [PATCH 01/10] open mail source files as binary Rich Lane
2009-12-31 23:36   ` [sup-devel] [PATCH 02/10] display_size is just size on Ruby 1.9 Rich Lane
2009-12-31 23:36     ` [sup-devel] [PATCH 03/10] add String#check Rich Lane
2009-12-31 23:36       ` [sup-devel] [PATCH 04/10] add String#ascii Rich Lane
2009-12-31 23:36         ` [sup-devel] [PATCH 05/10] fixup Iconv#easy_decode for Ruby 1.9 Rich Lane
2009-12-31 23:36           ` [sup-devel] [PATCH 06/10] add String#transcode Rich Lane
2009-12-31 23:36             ` [sup-devel] [PATCH 07/10] transcode output from mime-decode hook too Rich Lane
2009-12-31 23:36               ` [sup-devel] [PATCH 08/10] decode raw header/message to ascii before viewing Rich Lane
2009-12-31 23:36                 ` Rich Lane [this message]
2009-12-31 23:36                   ` [sup-devel] [PATCH 10/10] decode header fields of enclosed messages Rich Lane
2010-01-01 20:59   ` [sup-devel] [PATCH 01/10] open mail source files as binary Anthony Martinez
2010-01-01 21:43     ` William Morgan
2010-01-01 21:48       ` Rich Lane
2010-01-01 21:57         ` William Morgan
2010-01-02  1:16       ` Anthony Martinez
2010-01-01 19:09 ` [sup-devel] Ruby 1.9 encoding fixes William Morgan
     [not found]   ` <1262442839-sup-7738@peray>
2010-01-03 14:48     ` William Morgan
2010-01-03 15:48       ` Nicolas Pouillard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1262302618-20503-10-git-send-email-rlane@club.cc.cmu.edu \
    --to=rlane@club.cc.cmu.edu \
    --cc=sup-devel@rubyforge.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox