Index: modules/search/search.extender.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/search/search.extender.inc,v
retrieving revision 1.3
diff -u -r1.3 search.extender.inc
--- modules/search/search.extender.inc	13 Jan 2010 23:19:54 -0000	1.3
+++ modules/search/search.extender.inc	15 Apr 2010 15:35:27 -0000
@@ -425,7 +425,8 @@
       $i = 0;
       $sum = array_sum($this->multiply);
       foreach ($this->multiply as $total) {
-        $this->scoresArguments['total_' . $i] = $sum;
+        $this->scoresArguments[':total_' . $i] = $sum;
+        $i++;
       }
     }
 
Index: modules/search/search.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/search/search.test,v
retrieving revision 1.58
diff -u -r1.58 search.test
--- modules/search/search.test	6 Apr 2010 16:28:25 -0000	1.58
+++ modules/search/search.test	15 Apr 2010 15:35:27 -0000
@@ -412,6 +412,45 @@
       $this->assertEqual($set[0]['node']->nid, $nodes[$node_rank][1]->nid, 'Search ranking "' . $node_rank . '" order.');
     }
   }
+
+  /**
+   * Verifies that if we combine two rankings, search still works.
+   *
+   * See issue http://drupal.org/node/771596
+   */
+  function testDoubleRankings() {
+    // Login with sufficient privileges.
+    $this->drupalLogin($this->drupalCreateUser(array('post comments without approval', 'create page content')));
+
+    // See testRankings() above - build a node that will rank high for sticky.
+    $settings = array(
+      'type' => 'page', 
+      'title' => array(LANGUAGE_NONE => array(array('value' => 'Drupal rocks'))), 
+      'body' => array(LANGUAGE_NONE => array(array('value' => "Drupal's search rocks"))),
+      'sticky' => 1,
+    );
+
+    $node = $this->drupalCreateNode($settings);
+
+    // Update the search index.
+    module_invoke_all('update_index');
+    search_update_totals();
+
+    // Refresh variables after the treatment.
+    $this->refreshVariables();
+
+    // Set up for ranking sticky and lots of comments; make sure others are
+    // disabled.
+    $node_ranks = array('sticky', 'promote', 'relevance', 'recent', 'comments', 'views');
+    foreach ($node_ranks as $var) {
+      $value = ($var == 'sticky' || $var == 'comments') ? 10 : 0;
+      variable_set('node_rank_' . $var, $value);
+    }
+
+    // Do the search and assert the results.
+    $set = node_search_execute('rocks');
+    $this->assertEqual($set[0]['node']->nid, $node->nid, 'Search double ranking order.');
+  }
 }
 
 class SearchBlockTestCase extends DrupalWebTestCase {
