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);