diff -r 4d601d25eb5a MoinMoin/PageEditor.py
--- a/MoinMoin/PageEditor.py	Mon Sep 17 13:42:09 2007 +0200
+++ b/MoinMoin/PageEditor.py	Wed Sep 19 15:20:18 2007 -0400
@@ -946,6 +946,7 @@ Try a different name.""") % (wikiutil.es
         revdir = os.path.join(pagedir, 'revisions')
         cfn = os.path.join(pagedir, 'current')
         clfn = os.path.join(pagedir, 'current-locked')
+        cltfn = os.path.join(pagedir, 'current-locked.tmp')
 
         # !!! these log objects MUST be created outside the locked area !!!
 
@@ -988,14 +989,33 @@ Try a different name.""") % (wikiutil.es
             f = file(clfn)
             revstr = f.read()
             f.close()
-            rev = int(revstr)
+            try:
+                rev = int(revstr)
+            except ValueError, err:
+                raise self.SaveError, _("Unabled to determine current page revision from the current page marker. The page %s is damaged and cannot be edited right now.") % self.page_name
+
             if not was_deprecated:
                 if self.do_revision_backup or rev == 0:
                     rev += 1
             revstr = '%08d' % rev
-            f = file(clfn, 'w')
-            f.write(revstr+'\n')
-            f.close()
+            # write the actual current marker to a tmpfile
+            try:
+                f = file(cltfn, 'w')
+                f.write(revstr+'\n')
+                f.close()
+            except IOError, err:
+                try:
+                    os.remove(cltfn)
+                except:
+                    pass # we don't care for errors in the os.remove
+                # throw a nicer exception
+                if err.errno == errno.ENOSPC:
+                    raise self.SaveError, _("Cannot save page %s, no storage space left") % self.page_name
+                else:
+                    raise self.SaveError, _("An unknown I/O error occured while saving page %s (errno=%d)") % (self.page_name, err.errno)
+            # atomically put it in place (except on windows)
+            else:
+                filesys.rename(cltfn, clfn)
 
             if not deleted:
                 # save to page file
diff -r 4d601d25eb5a MoinMoin/caching.py
--- a/MoinMoin/caching.py	Mon Sep 17 13:42:09 2007 +0200
+++ b/MoinMoin/caching.py	Wed Sep 19 15:20:18 2007 -0400
@@ -145,7 +145,7 @@ class CacheEntry:
                         self.wlock.release()
             else:
                 self.request.log("Can't acquire write lock in %s" % self.lock_dir)
-        except (pickle.PicklingError, IOError, ValueError), err:
+        except (pickle.PicklingError, OSError, IOError, ValueError), err:
             raise CacheError(str(err))
 
     def remove(self):
