Index: includes/menu.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/menu.inc,v
retrieving revision 1.317
diff -u -p -r1.317 menu.inc
--- includes/menu.inc	2 Apr 2009 03:40:05 -0000	1.317
+++ includes/menu.inc	5 Apr 2009 14:43:46 -0000
@@ -2184,10 +2184,10 @@ function menu_link_save(&$item) {
   }
   // If every value in $existing_item is the same in the $item, there is no
   // reason to run the update queries or clear the caches. We use
-  // array_diff_assoc() with the $existing_item as the first parameter
-  // because $item has additional keys left over from the process of building
-  // the router item.
-  if (!$existing_item || array_diff_assoc($existing_item, $item)) {
+  // array_intersect_assoc() with the $item as the first parameter because
+  // $item may have additional keys left over from building a router entry.
+  // The intersect removes the extra keys, allowing a meaningful comparison.
+  if (!$existing_item || (array_intersect_assoc($item, $existing_item)) != $existing_item) {
     db_update('menu_links')
       ->fields(array(
         'menu_name' => $item['menu_name'],
Index: modules/menu/menu.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.test,v
retrieving revision 1.9
diff -u -p -r1.9 menu.test
--- modules/menu/menu.test	31 Mar 2009 01:49:52 -0000	1.9
+++ modules/menu/menu.test	5 Apr 2009 14:43:46 -0000
@@ -61,6 +61,12 @@ class MenuTestCase extends DrupalWebTest
     $old_title = $item['link_title'];
     $this->modifyMenuLink($item);
     $item = menu_link_load($item['mlid']);
+    // Verify that a change to the description is saved.
+    $description = $this->randomName(16);
+    $item['options']['attributes']['title']  = $description;
+    menu_link_save($item);
+    $saved_item = menu_link_load($item['mlid']);
+    $this->assertEqual($description, $saved_item['options']['attributes']['title'], t('Saving an existing link updates the description (title attribute)'));
     $this->resetMenuLink($item, $old_title);
   }
 
