From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 10.90.87.14 with SMTP id k14cs1331994agb; Thu, 31 Dec 2009 15:44:11 -0800 (PST) Received: by 10.224.13.19 with SMTP id z19mr9484429qaz.242.1262303051351; Thu, 31 Dec 2009 15:44:11 -0800 (PST) Return-Path: Received: from rubyforge.org (rubyforge.org [205.234.109.19]) by mx.google.com with ESMTP id 38si22746191qyk.51.2009.12.31.15.44.09; Thu, 31 Dec 2009 15:44:09 -0800 (PST) Received-SPF: pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) client-ip=205.234.109.19; Authentication-Results: mx.google.com; spf=pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) smtp.mail=sup-devel-bounces@rubyforge.org Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 759541D78872; Thu, 31 Dec 2009 18:44:09 -0500 (EST) Received: from magnesium.club.cc.cmu.edu (MAGNESIUM.CLUB.CC.cmu.edu [128.237.157.15]) by rubyforge.org (Postfix) with ESMTP id A4083185828E for ; Thu, 31 Dec 2009 18:44:05 -0500 (EST) Received: (qmail 306 invoked from network); 31 Dec 2009 23:37:25 -0000 Received: from pion.club.cc.cmu.edu (HELO localhost.localdomain) (128.237.157.88) by magnesium.club.cc.cmu.edu with SMTP; 31 Dec 2009 23:37:25 -0000 From: Rich Lane To: sup-devel@rubyforge.org Date: Thu, 31 Dec 2009 15:36:57 -0800 Message-Id: <1262302618-20503-10-git-send-email-rlane@club.cc.cmu.edu> X-Mailer: git-send-email 1.6.3.3 In-Reply-To: <1262302618-20503-9-git-send-email-rlane@club.cc.cmu.edu> References: <1262302618-20503-1-git-send-email-rlane@club.cc.cmu.edu> <1262302618-20503-2-git-send-email-rlane@club.cc.cmu.edu> <1262302618-20503-3-git-send-email-rlane@club.cc.cmu.edu> <1262302618-20503-4-git-send-email-rlane@club.cc.cmu.edu> <1262302618-20503-5-git-send-email-rlane@club.cc.cmu.edu> <1262302618-20503-6-git-send-email-rlane@club.cc.cmu.edu> <1262302618-20503-7-git-send-email-rlane@club.cc.cmu.edu> <1262302618-20503-8-git-send-email-rlane@club.cc.cmu.edu> <1262302618-20503-9-git-send-email-rlane@club.cc.cmu.edu> Subject: [sup-devel] [PATCH 09/10] use header from the RMail::Message in Message#parse_header X-BeenThere: sup-devel@rubyforge.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: Sup developer discussion List-Id: Sup developer discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: sup-devel-bounces@rubyforge.org Errors-To: sup-devel-bounces@rubyforge.org --- 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