Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.320
diff -u -p -r1.320 form.inc
--- includes/form.inc	3 Feb 2009 18:55:29 -0000	1.320
+++ includes/form.inc	27 Feb 2009 20:07:27 -0000
@@ -633,6 +633,9 @@ function drupal_redirect_form($form, $re
         call_user_func_array('drupal_goto', $goto);
       }
       else {
+        if (isset($_REQUEST['destination']) && $_REQUEST['destination'] == $_GET['q']) {
+          unset($_REQUEST['destination']);
+        }
         drupal_goto($goto);
       }
     }
Index: modules/search/search.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/search/search.test,v
retrieving revision 1.15
diff -u -p -r1.15 search.test
--- modules/search/search.test	22 Jan 2009 04:49:58 -0000	1.15
+++ modules/search/search.test	27 Feb 2009 20:07:27 -0000
@@ -385,6 +385,11 @@ class SearchBlockTestCase extends Drupal
     // Create and login user
     $admin_user = $this->drupalCreateUser(array('administer blocks'));
     $this->drupalLogin($admin_user);
+    
+    // Disable the theme form to avoid confusion.
+    $settings = theme_get_settings();
+    $settings['toggle_search'] = FALSE;
+    variable_set('theme_settings', $settings);
   }
 
   function testSearchFormBlock() {
@@ -398,4 +403,29 @@ class SearchBlockTestCase extends Drupal
     $this->drupalPost('admin/build/block', $edit, t('Save blocks'));
     $this->assertText(t('The block settings have been updated.'), t('Block successfully move to footer region.'));
   }
+  
+  /**
+   * Test that the search block form works correctly.
+   */
+  function testBlock() {
+    // Enable the block, and place it in the 'content' region so that it isn't
+    // hidden on 404 pages.
+    $edit = array('search_form[region]' => 'content');
+    $this->drupalPost('admin/build/block', $edit, t('Save blocks'));
+
+    // Test a normal search via the block form, from the front page.
+    $terms = array('search_block_form' => 'test');
+    $this->drupalPost('node', $terms, t('Search'));
+    $this->assertText('Your search yielded no results');
+
+    // Test a search from the block on a 404 page.
+    $this->drupalPost('foo', $terms, t('Search'));
+    $this->assertText('Your search yielded no results');
+
+    // Test a search from the block when it doesn't appear on the search page.
+    $edit = array('pages' => 'search');
+    $this->drupalPost('admin/build/block/configure/search/form', $edit, t('Save block'));
+    $this->drupalPost('node', $terms, t('Search'));
+    $this->assertText('Your search yielded no results');
+  }
 }
