Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.77
diff -u -r1.77 form.inc
--- includes/form.inc	12 Mar 2006 09:28:12 -0000	1.77
+++ includes/form.inc	15 Mar 2006 04:34:54 -0000
@@ -69,6 +69,8 @@
     if (!variable_get('drupal_private_key', '')) {
       variable_set('drupal_private_key', mt_rand());
     }
+    // Prevent caching pages with form tokens.
+    page_set_cacheable(FALSE);
 
     $form['form_token'] = array('#type' => 'hidden', '#default_value' => md5(session_id() . $form['#token'] . variable_get('drupal_private_key', '')));
   }
@@ -325,14 +327,15 @@
       if ($posted) {
         switch ($form['#type']) {
           case 'checkbox':
-            $form['#value'] = isset($edit) ? $form['#return_value'] : 0;
+            $form['#value'] = !empty($edit) ? $form['#return_value'] : 0;
             break;
           case 'select':
             $form['#value'] = isset($edit) ? $edit : array();
             break;
           case 'textfield':
             if (isset($edit)) {
-              $form['#value'] = str_replace(array("\r", "\n"), '', $edit);
+              // Equate $edit to the form value to ensure it's marked for validation
+              $form['#value'] = $edit = str_replace(array("\r", "\n"), '', $edit);
             }
             break;
           default:
@@ -340,7 +343,8 @@
               $form['#value'] = $edit;
             }
         }
-        if (isset($form['#value'])) {
+        // Mark all posted values for validation
+        if (isset($form['#value']) && $form['#value'] === $edit) {
           $form['#needs_validation'] = TRUE;
         }
       }
