Index: upload.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/upload.module,v
retrieving revision 1.55
diff -u -F^f -r1.55 upload.module
--- upload.module	11 Oct 2005 19:44:35 -0000	1.55
+++ upload.module	25 Oct 2005 05:58:18 -0000
@@ -348,11 +348,11 @@ function upload_save($node) {
       if ($file = file_save_upload($file, $file->filename)) {
         $fid = db_next_id('{files}_fid');
         db_query("INSERT INTO {files} (fid, nid, vid, filename, filepath, filemime, filesize, list, description) VALUES (%d, %d, %d, '%s', '%s', '%s', %d, %d, '%s')",
-                 $fid, $node->nid, $node->vid, $file->filename, $file->filepath, $file->filemime, $file->filesize, $node->list[$key], $file->description);
+                 $fid, $node->nid, $node->vid, $file->filename, $file->filepath, $file->filemime, $file->filesize, $node->list[$key], $node->description[$key]);
       }
     }
   }
-  // Remove or update existing files:
+  // Remove existing files, as needed
   foreach ((array)$node->remove as $key => $value) {
     if ($node->remove[$key]) {
       db_query('DELETE FROM {files} WHERE fid = %d AND vid = %d', $key, $node->vid);
@@ -363,20 +363,25 @@ function upload_save($node) {
       }
     }
   }
-  foreach ((array)$node->list as $key => $value) {
-    if (!$node->remove[$key]) {
-      db_query('UPDATE {files} SET list = %d, description = \'%s\' WHERE fid = %d AND vid = %d', $node->list[$key], $node->description[$key], $key, $node->vid);
-    }
-  }
+  // Create a new revision, as needed
   if ($node->old_vid) {
     foreach ((array)$node->remove as $key => $remove) {
       if (!$remove) {
         $file = db_fetch_object(db_query('SELECT * FROM {files} WHERE vid = %d AND fid = %d', $node->old_vid, $key));
         db_query("INSERT INTO {files} (fid, nid, vid, filename, filepath, filemime, filesize, list, description) VALUES (%d, %d, %d, '%s', '%s', '%s', %d, %d, '%s')",
-                 $key, $node->nid, $node->vid, $file->filename, $file->filepath, $file->filemime, $file->filesize, $file->list, $file->description);
+                 $key, $node->nid, $node->vid, $file->filename, $file->filepath, $file->filemime, $file->filesize, $node->list[$key], $node->description[$key]);
+      }
+    }
+  }
+  // Update existing files, as needed
+  else {
+    foreach ((array)$node->list as $key => $value) {
+      if (!$node->remove[$key]) {
+        db_query('UPDATE {files} SET list = %d, description = \'%s\' WHERE fid = %d AND vid = %d', $node->list[$key], $node->description[$key], $key, $node->vid);
       }
     }
   }
+
   return;
 }
 
