]> git.notmuchmail.org Git - sup/commitdiff
catching more weird imap errors
authorwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Thu, 3 May 2007 19:55:37 +0000 (19:55 +0000)
committerwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Thu, 3 May 2007 19:55:37 +0000 (19:55 +0000)
git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@388 5c8cc53c-5e98-4d25-b20a-d8db53a31250

lib/sup/imap.rb

index f79befba0d44160b5c6da2a7858edb30393dadc8..6978120c5500974a48a5dc26ce92a635df55bd0d 100644 (file)
@@ -209,6 +209,10 @@ private
 
   def make_id imap_stuff
     # use 7 digits for the size. why 7? seems nice.
+    %w(RFC822.SIZE INTERNALDATE).each do |w|
+      raise FatalSourceError, "requested data not in IMAP response: #{w}" unless imap_stuff.attr[w]
+    end
+    
     msize, mdate = imap_stuff.attr['RFC822.SIZE'] % 10000000, Time.parse(imap_stuff.attr["INTERNALDATE"])
     sprintf("%d%07d", mdate.to_i, msize).to_i
   end
@@ -221,7 +225,7 @@ private
     got_id = make_id results
     raise OutOfSyncSourceError, "IMAP message mismatch: requested #{id}, got #{got_id}." unless got_id == id
 
-    fields.map { |f| results.attr[f] }
+    fields.map { |f| results.attr[f] or raise FatalSourceError, "empty response from IMAP server: #{f}" }
   end
 
   ## execute a block, connected if unconnected, re-connected up to 3