summaryrefslogtreecommitdiff
path: root/tests/files/tests.py
diff options
context:
space:
mode:
authorSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2025-04-04 09:52:22 +0200
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2025-04-07 16:13:19 +0200
commit77d2037511cc0152af6bea402bd09632ed7ca551 (patch)
tree51ce118358aad5897e4ff1d80aa7be9d8e93e2a5 /tests/files/tests.py
parentcd1aa54f5a1ad8673f8852aa3b0022c06b154b79 (diff)
[5.2.x] Fixed #36298 -- Truncated the overwritten file content in file_move_safe().
Regression in 58cd4902a71a3695dd6c21dc957f59c333db364c. Thanks Baptiste Mispelon for the report. Backport of 8ad3e80e88201f4c557f6fa79fcfc0f8a0961830 from main.
Diffstat (limited to 'tests/files/tests.py')
-rw-r--r--tests/files/tests.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/files/tests.py b/tests/files/tests.py
index 4f6d1fa74b..7e365aae39 100644
--- a/tests/files/tests.py
+++ b/tests/files/tests.py
@@ -496,6 +496,27 @@ class FileMoveSafeTests(unittest.TestCase):
os.close(handle_b)
os.close(handle_c)
+ def test_file_move_ensure_truncation(self):
+ with tempfile.NamedTemporaryFile(delete=False) as src:
+ src.write(b"content")
+ src_name = src.name
+ self.addCleanup(
+ lambda: os.remove(src_name) if os.path.exists(src_name) else None
+ )
+
+ with tempfile.NamedTemporaryFile(delete=False) as dest:
+ dest.write(b"This is a longer content.")
+ dest_name = dest.name
+ self.addCleanup(os.remove, dest_name)
+
+ with mock.patch("django.core.files.move.os.rename", side_effect=OSError()):
+ file_move_safe(src_name, dest_name, allow_overwrite=True)
+
+ with open(dest_name, "rb") as f:
+ content = f.read()
+
+ self.assertEqual(content, b"content")
+
class SpooledTempTests(unittest.TestCase):
def test_in_memory_spooled_temp(self):