Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.452
diff -u -p -r1.452 form.inc
--- includes/form.inc	13 Apr 2010 15:23:02 -0000	1.452
+++ includes/form.inc	13 Apr 2010 16:06:20 -0000
@@ -632,6 +632,32 @@ function drupal_process_form($form_id, &
     drupal_static_reset('drupal_html_id');
 
     if ($form_state['submitted'] && !form_get_errors() && !$form_state['rebuild']) {
+      // Before executing submit handlers, ensure that $form_state['values']
+      // contains validated data only.
+      if (isset($form_state['triggering_element']['#limit_validation_errors']) && ($form_state['triggering_element']['#limit_validation_errors'] !== FALSE)) {
+        $validated_values = array();
+        foreach ($form_state['triggering_element']['#limit_validation_errors'] as $section) {
+          $value = $form_state['values'];
+          $value_exists = TRUE;
+          foreach ($section as $parent) {
+            if (is_array($value) && array_key_exists($parent, $value)) {
+              $value = $value[$parent];
+            }
+            else {
+              $value = NULL;
+              $value_exists = FALSE;
+              break;
+            }
+          }
+          if ($value_exists) {
+            // Leverage the ability of the internal _form_set_value() function
+            // to set data deep into an array.
+            _form_set_value($validated_values, NULL, $section, $value);
+          }
+        }
+        $form_state['values'] = $validated_values;
+      }
+
       // Execute form submit handlers.
       form_execute_handlers('submit', $form, $form_state);
 
