Fixed #20660 -- Do not try to delete an unset FieldFile

Thanks stanislas.guerra at gmail.com for the report and
Baptiste Mispelon for the review.
This commit is contained in:
Claude Paroz 2013-06-27 10:58:05 +02:00
parent b5f709e6f4
commit ea3fe78a9d
2 changed files with 13 additions and 0 deletions

View File

@ -96,6 +96,8 @@ class FieldFile(File):
save.alters_data = True save.alters_data = True
def delete(self, save=True): def delete(self, save=True):
if not self:
return
# Only close the file if it's already open, which we know by the # Only close the file if it's already open, which we know by the
# presence of self._file # presence of self._file
if hasattr(self, '_file'): if hasattr(self, '_file'):

View File

@ -432,6 +432,17 @@ class FileFieldTests(unittest.TestCase):
field.save_form_data(d, 'else.txt') field.save_form_data(d, 'else.txt')
self.assertEqual(d.myfile, 'else.txt') self.assertEqual(d.myfile, 'else.txt')
def test_delete_when_file_unset(self):
"""
Calling delete on an unset FileField should not call the file deletion
process, but fail silently (#20660).
"""
d = Document()
try:
d.myfile.delete()
except OSError:
self.fail("Deleting an unset FileField should not raise OSError.")
class BinaryFieldTests(test.TestCase): class BinaryFieldTests(test.TestCase):
binary_data = b'\x00\x46\xFE' binary_data = b'\x00\x46\xFE'