mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[5.2.x] Fixed #36191 -- Truncated the overwritten file content in FileSystemStorage.
Backport of 0d1dd6bba0 from main.
			
			
This commit is contained in:
		
							
								
								
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							| @@ -369,6 +369,7 @@ answer newbie questions, and generally made Django that much better: | ||||
|     Fraser Nevett <mail@nevett.org> | ||||
|     Gabriel Grant <g@briel.ca> | ||||
|     Gabriel Hurley <gabriel@strikeawe.com> | ||||
|     Gaël Utard | ||||
|     gandalf@owca.info | ||||
|     Garry Lawrence | ||||
|     Garry Polley <garrympolley@gmail.com> | ||||
|   | ||||
| @@ -129,11 +129,11 @@ class FileSystemStorage(Storage, StorageSettingsMixin): | ||||
|                     ) | ||||
|                     # RemovedInDjango60Warning: when the deprecation ends, replace with: | ||||
|                     # 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: | ||||
|                         open_flags = self.OS_OPEN_FLAGS | ||||
|                     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) | ||||
|                     _file = None | ||||
|                     try: | ||||
|   | ||||
| @@ -12,3 +12,7 @@ Bugfixes | ||||
| * Fixed a bug in Django 5.1 where the ``{% querystring %}`` template tag | ||||
|   returned an empty string rather than ``"?"`` when all parameters had been | ||||
|   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: | ||||
|             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): | ||||
|         """Saving to same file name twice overwrites the first file.""" | ||||
|         name = "test.file" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user