mirror of
https://github.com/django/django.git
synced 2025-03-06 15:32:33 +00:00
[5.2.x] Fixed #36191 -- Truncated the overwritten file content in FileSystemStorage.
Backport of 0d1dd6bba0c18b7feb6caa5cbd8df80fbac54afd from main.
This commit is contained in:
parent
c55a808198
commit
ae391ca368
1
AUTHORS
1
AUTHORS
@ -369,6 +369,7 @@ answer newbie questions, and generally made Django that much better:
|
|||||||
Fraser Nevett <mail@nevett.org>
|
Fraser Nevett <mail@nevett.org>
|
||||||
Gabriel Grant <g@briel.ca>
|
Gabriel Grant <g@briel.ca>
|
||||||
Gabriel Hurley <gabriel@strikeawe.com>
|
Gabriel Hurley <gabriel@strikeawe.com>
|
||||||
|
Gaël Utard
|
||||||
gandalf@owca.info
|
gandalf@owca.info
|
||||||
Garry Lawrence
|
Garry Lawrence
|
||||||
Garry Polley <garrympolley@gmail.com>
|
Garry Polley <garrympolley@gmail.com>
|
||||||
|
@ -129,11 +129,11 @@ class FileSystemStorage(Storage, StorageSettingsMixin):
|
|||||||
)
|
)
|
||||||
# RemovedInDjango60Warning: when the deprecation ends, replace with:
|
# RemovedInDjango60Warning: when the deprecation ends, replace with:
|
||||||
# if self._allow_overwrite:
|
# if self._allow_overwrite:
|
||||||
# open_flags = open_flags & ~os.O_EXCL
|
# open_flags = open_flags & ~os.O_EXCL | os.O_TRUNC
|
||||||
if self.OS_OPEN_FLAGS != open_flags:
|
if self.OS_OPEN_FLAGS != open_flags:
|
||||||
open_flags = self.OS_OPEN_FLAGS
|
open_flags = self.OS_OPEN_FLAGS
|
||||||
elif self._allow_overwrite:
|
elif self._allow_overwrite:
|
||||||
open_flags = open_flags & ~os.O_EXCL
|
open_flags = open_flags & ~os.O_EXCL | os.O_TRUNC
|
||||||
fd = os.open(full_path, open_flags, 0o666)
|
fd = os.open(full_path, open_flags, 0o666)
|
||||||
_file = None
|
_file = None
|
||||||
try:
|
try:
|
||||||
|
@ -12,3 +12,7 @@ Bugfixes
|
|||||||
* Fixed a bug in Django 5.1 where the ``{% querystring %}`` template tag
|
* Fixed a bug in Django 5.1 where the ``{% querystring %}`` template tag
|
||||||
returned an empty string rather than ``"?"`` when all parameters had been
|
returned an empty string rather than ``"?"`` when all parameters had been
|
||||||
removed from the query string (:ticket:`36182`).
|
removed from the query string (:ticket:`36182`).
|
||||||
|
|
||||||
|
* Fixed a bug in Django 5.1 where ``FileSystemStorage``, with
|
||||||
|
``allow_overwrite`` set to ``True``, did not truncate the overwritten file
|
||||||
|
content (:ticket:`36191`).
|
||||||
|
@ -704,6 +704,18 @@ class OverwritingStorageTests(FileStorageTests):
|
|||||||
finally:
|
finally:
|
||||||
self.storage.delete(name)
|
self.storage.delete(name)
|
||||||
|
|
||||||
|
def test_save_overwrite_behavior_truncate(self):
|
||||||
|
name = "test.file"
|
||||||
|
original_content = b"content extra extra extra"
|
||||||
|
new_smaller_content = b"content"
|
||||||
|
self.storage.save(name, ContentFile(original_content))
|
||||||
|
try:
|
||||||
|
self.storage.save(name, ContentFile(new_smaller_content))
|
||||||
|
with self.storage.open(name) as fp:
|
||||||
|
self.assertEqual(fp.read(), new_smaller_content)
|
||||||
|
finally:
|
||||||
|
self.storage.delete(name)
|
||||||
|
|
||||||
def test_save_overwrite_behavior_temp_file(self):
|
def test_save_overwrite_behavior_temp_file(self):
|
||||||
"""Saving to same file name twice overwrites the first file."""
|
"""Saving to same file name twice overwrites the first file."""
|
||||||
name = "test.file"
|
name = "test.file"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user