### Eclipse Workspace Patch 1.0
#P drupal-contrib-modules-mailhandler
Index: mailhandler.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mailhandler/Attic/mailhandler.module,v
retrieving revision 1.87.2.9
diff -u -r1.87.2.9 mailhandler.module
--- mailhandler.module	2 May 2008 17:32:18 -0000	1.87.2.9
+++ mailhandler.module	25 Jun 2008 19:18:16 -0000
@@ -151,9 +151,39 @@
   list($fromaddress, $fromname) = mailhandler_get_fromaddress($header, $mailbox);
 
   //dprint_r($node); //DEBUG
+  
+  // Drupal 5.x & 6.x don't support multiple validations: each node_validate()
+  // call will ADD error messages to previous ones, so if some validation error
+  // occours in one message it will be reported in all messages after it.
+  // Since there is no way to reset form errors, the only method to avoid this
+  // problem is working with $_SESSION['messages'], used by form_set_error().
+  // See http://drupal.org/node/271975 for more info.
+  // Warning: with this method, if the same error message is reported for 2+ different
+  // fields it will be detected only for the last one.
 
+  if (!isset($_SESSION['messages'])) {
+    $_SESSION['messages'] = array();
+  }
+  $saved_errors = is_array($_SESSION['messages']['error']) ? $_SESSION['messages']['error'] : array();
+  $_SESSION['messages']['error'] = array();
   node_validate($node);
-  $error = form_get_errors();
+  $error = array();
+  if (count($_SESSION['messages']['error'])) {
+    $allerrors = form_get_errors();
+    foreach ($_SESSION['messages']['error'] as $message) {
+      $keys = array_keys($allerrors, $message);
+      if (!$keys || !count($keys)) {
+        // Not a validation error (but an error, i'll print it)
+        $saved_errors[] = $message;
+      } else {
+        // This is a validation error, i take the last field with it (previous fields
+        // should be about previous validations)
+        $error[$keys[count($keys) - 1]] = $message;
+      }
+    }
+  }
+  $_SESSION['messages']['error'] = $saved_errors;
+
   if (!$error) {
     // Prepare the node for save and allow modules make changes
     $node = node_submit($node);
