Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.448
diff -u -r1.448 form.inc
--- includes/form.inc	4 Apr 2010 13:22:51 -0000	1.448
+++ includes/form.inc	6 Apr 2010 11:32:33 -0000
@@ -1928,6 +1928,8 @@
   $size = $element['#size'] ? ' size="' . $element['#size'] . '"' : '';
   _form_set_class($element, array('form-select'));
   $multiple = $element['#multiple'];
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['name'], $element['#attributes']['multiple'], $element['#attributes']['id'], $element['#attributes']['size']);
   return '<select name="' . $element['#name'] . '' . ($multiple ? '[]' : '') . '"' . ($multiple ? ' multiple="multiple" ' : '') . drupal_attributes($element['#attributes']) . ' id="' . $element['#id'] . '" ' . $size . '>' . form_select_options($element) . '</select>';
 }
 
@@ -2077,6 +2079,8 @@
 function theme_radio($variables) {
   $element = $variables['element'];
   _form_set_class($element, array('form-radio'));
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['type'], $element['#attributes']['id'], $element['#attributes']['name'], $element['#attributes']['value'], $element['#attributes']['checked']);
   $output = '<input type="radio" ';
   $output .= 'id="' . $element['#id'] . '" ';
   $output .= 'name="' . $element['#name'] . '" ';
@@ -2321,6 +2325,8 @@
   $element = $variables['element'];
   $t = get_t();
   _form_set_class($element, array('form-checkbox'));
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['type'], $element['#attributes']['name'], $element['#attributes']['id'], $element['#attributes']['value'], $element['#attributes']['checked']);
   $checkbox = '<input ';
   $checkbox .= 'type="checkbox" ';
   $checkbox .= 'name="' . $element['#name'] . '" ';
@@ -2773,6 +2779,8 @@
 function theme_button($variables) {
   $element = $variables['element'];
   $element['#attributes']['class'][] = 'form-' . $element['#button_type'];
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['type'], $element['#attributes']['name'], $element['#attributes']['id'], $element['#attributes']['value']);
 
   return '<input type="submit" ' . (empty($element['#name']) ? '' : 'name="' . $element['#name'] . '" ') . 'id="' . $element['#id'] . '" value="' . check_plain($element['#value']) . '" ' . drupal_attributes($element['#attributes']) . " />\n";
 }
@@ -2792,6 +2800,8 @@
 function theme_image_button($variables) {
   $element = $variables['element'];
   $element['#attributes']['class'][] = 'form-' . $element['#button_type'];
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['type'], $element['#attributes']['name'], $element['#attributes']['id'], $element['#attributes']['value'], $element['#attributes']['src'], $element['#attributes']['alt'], $element['#attributes']['title']);
 
   return '<input type="image" name="' . $element['#name'] . '" ' .
     (!empty($element['#value']) ? ('value="' . check_plain($element['#value']) . '" ') : '') .
@@ -2817,6 +2827,8 @@
  */
 function theme_hidden($variables) {
   $element = $variables['element'];
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['type'], $element['#attributes']['name'], $element['#attributes']['id'], $element['#attributes']['value']);
   return '<input type="hidden" name="' . $element['#name'] . '" id="' . $element['#id'] . '" value="' . check_plain($element['#value']) . "\" " . drupal_attributes($element['#attributes']) . " />\n";
 }
 
@@ -2848,6 +2860,8 @@
     $extra =  '<input class="autocomplete" type="hidden" id="' . $element['#id'] . '-autocomplete" value="' . check_url(url($element['#autocomplete_path'], array('absolute' => TRUE))) . '" disabled="disabled" />';
   }
   _form_set_class($element, $class);
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['type'], $element['#attributes']['name'], $element['#attributes']['id'], $element['#attributes']['value'], $element['#attributes']['maxlength'], $element['#attributes']['size']);
 
   $output .= '<input type="text"' . $maxlength . ' name="' . $element['#name'] . '" id="' . $element['#id'] . '"' . $size . ' value="' . check_plain($element['#value']) . '"' . drupal_attributes($element['#attributes']) . ' />';
 
@@ -2871,6 +2885,8 @@
   $element = $variables['element'];
   // Anonymous div to satisfy XHTML compliance.
   $action = $element['#action'] ? 'action="' . check_url($element['#action']) . '" ' : '';
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['action'], $element['#attributes']['accept-charset'], $element['#attributes']['method'], $element['#attributes']['id']);
   return '<form ' . $action . ' accept-charset="UTF-8" method="' . $element['#method'] . '" id="' . $element['#id'] . '"' . drupal_attributes($element['#attributes']) . ">\n<div>" . $element['#children'] . "\n</div></form>\n";
 }
 
@@ -2904,6 +2920,8 @@
   $output = '<div' . drupal_attributes($wrapper_attributes) . '>';
 
   _form_set_class($element, $class);
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['cols'], $element['#attributes']['rows'], $element['#attributes']['name'], $element['#attributes']['id']);
   $output .= '<textarea cols="' . $element['#cols'] . '" rows="' . $element['#rows'] . '" name="' . $element['#name'] . '" id="' . $element['#id'] . '" ' . drupal_attributes($element['#attributes']) . '>' . check_plain($element['#value']) . '</textarea>';
 
   $output .= '</div>';
@@ -2930,6 +2948,8 @@
   $maxlength = $element['#maxlength'] ? ' maxlength="' . $element['#maxlength'] . '" ' : '';
 
   _form_set_class($element, array('form-text'));
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['type'], $element['#attributes']['name'], $element['#attributes']['id'], $element['#attributes']['maxlength'], $element['#attributes']['size']);
   $output = '<input type="password" name="' . $element['#name'] . '" id="' . $element['#id'] . '" ' . $maxlength . $size . drupal_attributes($element['#attributes']) . ' />';
   return $output;
 }
@@ -2968,6 +2988,8 @@
 function theme_file($variables) {
   $element = $variables['element'];
   _form_set_class($element, array('form-file'));
+  // Prevent duplicate attributes.
+  unset($element['#attributes']['type'], $element['#attributes']['name'], $element['#attributes']['id'], $element['#attributes']['size']);
   return '<input type="file" name="' . $element['#name'] . '"' . ($element['#attributes'] ? ' ' . drupal_attributes($element['#attributes']) : '') . ' id="' . $element['#id'] . '" size="' . $element['#size'] . "\" />\n";
 }
 
