[Python-checkins] r88406 - in python/branches/release27-maint: Lib/mailbox.py Misc/NEWS
r.david.murray
python-checkins at python.org
Sat Feb 12 00:03:13 CET 2011
Author: r.david.murray
Date: Sat Feb 12 00:03:13 2011
New Revision: 88406
Log:
Merged revisions 88403 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
Test not backported since they depend on 3.x quirks. Not
easy to rewrite them for 2.7.
........
r88403 | r.david.murray | 2011-02-11 17:47:17 -0500 (Fri, 11 Feb 2011) | 3 lines
#11116: roll back on error during add so mailbox isn't left corrupted.
........
Modified:
python/branches/release27-maint/ (props changed)
python/branches/release27-maint/Lib/mailbox.py
python/branches/release27-maint/Misc/NEWS
Modified: python/branches/release27-maint/Lib/mailbox.py
==============================================================================
--- python/branches/release27-maint/Lib/mailbox.py (original)
+++ python/branches/release27-maint/Lib/mailbox.py Sat Feb 12 00:03:13 2011
@@ -253,8 +253,11 @@
tmp_file = self._create_tmp()
try:
self._dump_message(message, tmp_file)
- finally:
- _sync_close(tmp_file)
+ except BaseException:
+ tmp_file.close()
+ os.remove(tmp_file.name)
+ raise
+ _sync_close(tmp_file)
if isinstance(message, MaildirMessage):
subdir = message.get_subdir()
suffix = self.colon + message.get_info()
@@ -700,9 +703,14 @@
def _append_message(self, message):
"""Append message to mailbox and return (start, stop) offsets."""
self._file.seek(0, 2)
- self._pre_message_hook(self._file)
- offsets = self._install_message(message)
- self._post_message_hook(self._file)
+ before = self._file.tell()
+ try:
+ self._pre_message_hook(self._file)
+ offsets = self._install_message(message)
+ self._post_message_hook(self._file)
+ except BaseException:
+ self._file.truncate(before)
+ raise
self._file.flush()
self._file_length = self._file.tell() # Record current length of mailbox
return offsets
@@ -872,7 +880,11 @@
if self._locked:
_lock_file(f)
try:
- self._dump_message(message, f)
+ try:
+ self._dump_message(message, f)
+ except BaseException:
+ os.remove(new_path)
+ raise
if isinstance(message, MHMessage):
self._dump_sequences(message, new_key)
finally:
Modified: python/branches/release27-maint/Misc/NEWS
==============================================================================
--- python/branches/release27-maint/Misc/NEWS (original)
+++ python/branches/release27-maint/Misc/NEWS Sat Feb 12 00:03:13 2011
@@ -37,6 +37,9 @@
Library
-------
+- Issue #11116: any error during addition of a message to a mailbox now causes
+ a rollback, instead of leaving the mailbox partially modified.
+
- Issue #8275: Fix passing of callback arguments with ctypes under Win64.
Patch by Stan Mihai.
More information about the Python-checkins
mailing list