]> git.cworth.org Git - sup/commitdiff
fix (i think) the infamous spaces-in-message-ids problem
authorwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Sun, 28 Oct 2007 03:07:26 +0000 (03:07 +0000)
committerwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Sun, 28 Oct 2007 03:07:26 +0000 (03:07 +0000)
git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@637 5c8cc53c-5e98-4d25-b20a-d8db53a31250

lib/sup/index.rb
lib/sup/message.rb

index 0da441afd3220be194164c805f11531441512f27..82fa1734017e5115203aa234c315de4d0deea5d7 100644 (file)
@@ -305,7 +305,7 @@ EOS
       "from" => doc[:from],
       "to" => doc[:to],
       "message-id" => doc[:message_id],
-      "references" => doc[:refs],
+      "references" => doc[:refs].split(/\s+/).map { |x| "<#{x}>" }.join(" "),
     }
 
     Message.new :source => source, :source_info => doc[:source_info].to_i, 
index 8614b3c2c8a55ccbf53e4d1231b9f509f95ab4dc..82fddcf05ea6dc0a3457625213b4732b639c28b7 100644 (file)
@@ -55,17 +55,17 @@ class Message
 
   def parse_header header
     header.each { |k, v| header[k.downcase] = v }
-
+    
     @from = PersonManager.person_for header["from"]
 
-    @id = header["message-id"]
-    if @id
-      id.gsub!(/\s+/, "")
-    else
-      @id = "sup-faked-" + Digest::MD5.hexdigest(raw_header)
-      Redwood::log "faking message-id for message from #@from: #@id"
-    end
-
+    @id =
+      if header["message-id"]
+        sanitize_message_id header["message-id"]
+      else
+        "sup-faked-" + Digest::MD5.hexdigest(raw_header)
+        Redwood::log "faking message-id for message from #@from: #@id"
+      end
+    
     date = header["date"]
     @date =
       case date
@@ -86,8 +86,9 @@ class Message
     @to = PersonManager.people_for header["to"]
     @cc = PersonManager.people_for header["cc"]
     @bcc = PersonManager.people_for header["bcc"]
-    @refs = (header["references"] || "").gsub(/[<>]/, "").split(/\s+/).flatten
-    @replytos = (header["in-reply-to"] || "").scan(/<(.*?)>/).flatten
+    @refs = (header["references"] || "").scan(/<(.+?)>/).map { |x| sanitize_message_id x.first }
+    @replytos = (header["in-reply-to"] || "").scan(/<(.+?)>/).map { |x| sanitize_message_id x.first }
+
     @replyto = PersonManager.person_for header["reply-to"]
     @list_address =
       if header["list-post"]
@@ -109,6 +110,8 @@ class Message
     @source.fn_for_offset @source_info
   end
 
+  def sanitize_message_id mid; mid.gsub(/\s/, "") end
+
   def save index
     index.sync_message self if @dirty
     @dirty = false