Index: modules/book/book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.module,v
retrieving revision 1.475
diff -u -p -r1.475 book.module
--- modules/book/book.module	16 Nov 2008 19:41:14 -0000	1.475
+++ modules/book/book.module	3 Dec 2008 22:32:28 -0000
@@ -545,7 +545,7 @@ function book_update_bid($book_link) {
 
   if ($mlids) {
     db_update('book')
-      ->fields(array('bid', $book_link['bid']))
+      ->fields(array('bid' => $book_link['bid']))
       ->condition('mlid', $mlids, 'IN')
       ->execute();
   }
@@ -746,6 +746,10 @@ function book_nodeapi_presave(&$node, $t
   // Always save a revision for non-administrators.
   if (!empty($node->book['bid']) && !user_access('administer nodes')) {
     $node->revision = 1;
+    // The database schema requires a log message for every revision.
+    if (!isset($node->log)) {
+      $node->log = '';
+    }
   }
   // Make sure a new node gets a new menu link.
   if (empty($node->nid)) {
Index: modules/book/book.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.test,v
retrieving revision 1.4
diff -u -p -r1.4 book.test
--- modules/book/book.test	25 Nov 2008 13:14:26 -0000	1.4
+++ modules/book/book.test	3 Dec 2008 22:32:28 -0000
@@ -21,7 +21,7 @@ class BookTestCase extends DrupalWebTest
    */
   function testBook() {
     // Create users.
-    $book_author = $this->drupalCreateUser(array('create new books', 'create book content', 'add content to books'));
+    $book_author = $this->drupalCreateUser(array('create new books', 'create book content', 'edit own book content', 'add content to books'));
     $web_user = $this->drupalCreateUser(array('access printer-friendly version'));
 
     // Create new book.
@@ -57,6 +57,21 @@ class BookTestCase extends DrupalWebTest
     $this->checkBookNode($nodes[2], NULL, $nodes[1], $nodes[0], $nodes[3]);
     $this->checkBookNode($nodes[3], NULL, $nodes[2], $book, $nodes[4]);
     $this->checkBookNode($nodes[4], NULL, $nodes[3], $book, false);
+
+    $this->drupalLogout();
+
+    // Move a page to a different book.
+    $this->drupalLogin($book_author);
+    $other_book = $this->createBookNode('new');
+    $node = $this->createBookNode($book->nid);
+    $edit = array('book[bid]' => $other_book->nid);
+    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
+
+    $this->drupalLogout();
+    $this->drupalLogin($web_user);
+    $this->book = $other_book;
+    $this->checkBookNode($other_book, array($node), false, false, $node);
+    $this->checkBookNode($node, NULL, $other_book, $other_book, false);
   }
 
   /**
