[sup-talk] [PATCH] Fix a bug about forwarding that trimmed out newlines.

Nicolas Pouillard nicolas.pouillard at gmail.com
Fri Apr 4 12:09:13 EDT 2008


This seems to happen when one don't touch the forwarded
email. Indeed most of the sup's code tend to assume that
messages body are reprensented using an array of string
*without* a trailing \n, except some parts of the code.

This patch enforce that. It could become even more strict
by raising an error instead of logging in join_lines.
---
 lib/sup/modes/edit-message-mode.rb |   11 +++++------
 lib/sup/util.rb                    |    6 ++++++
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/lib/sup/modes/edit-message-mode.rb b/lib/sup/modes/edit-message-mode.rb
index dd96002..c3634af 100644
--- a/lib/sup/modes/edit-message-mode.rb
+++ b/lib/sup/modes/edit-message-mode.rb
@@ -216,7 +216,7 @@ protected
   def parse_file fn
     File.open(fn) do |f|
       header = MBox::read_header f
-      body = f.readlines
+      body = f.readlines.map { |l| l.chomp }
 
       header.delete_if { |k, v| NON_EDITABLE_HEADERS.member? k }
       header.each { |k, v| header[k] = parse_header k, v }
@@ -307,9 +307,8 @@ protected
   def build_message date
     m = RMail::Message.new
     m.header["Content-Type"] = "text/plain; charset=#{$encoding}"
-    m.body = @body.join
-    m.body = m.body
-    m.body += sig_lines.join("\n") unless $config[:edit_signature]
+    m.body = @body.join_lines
+    m.body += sig_lines.join_lines unless $config[:edit_signature]
 
     ## there are attachments, so wrap body in an attachment of its own
     unless @attachments.empty?
@@ -367,7 +366,7 @@ EOS
     end
 
     f.puts
-    f.puts sanitize_body(@body.join)
+    f.puts sanitize_body(@body.join_lines)
     f.puts sig_lines if full unless $config[:edit_signature]
   end  
 
@@ -412,7 +411,7 @@ private
   end
 
   def top_posting?
-    @body.join =~ /(\S+)\s*Excerpts from.*\n(>.*\n)+\s*\Z/
+    @body.join_lines =~ /(\S+)\s*Excerpts from.*\n(>.*\n)+\s*\Z/
   end
 
   def sig_lines
diff --git a/lib/sup/util.rb b/lib/sup/util.rb
index 99e73b4..544859c 100644
--- a/lib/sup/util.rb
+++ b/lib/sup/util.rb
@@ -390,6 +390,12 @@ module Enumerable
 end
 
 class Array
+
+  def join_lines
+    Redwood::log "Some newlines are there..." if any? { |l| l =~ /\n/ }
+    map { |l| l.chomp }.join("\n")
+  end
+
   def flatten_one_level
     inject([]) { |a, e| a + e }
   end
-- 
1.5.5.rc3



More information about the sup-talk mailing list