diff options
| author | Florian Apolloner <florian@apolloner.eu> | 2012-07-30 21:58:22 +0200 |
|---|---|---|
| committer | Florian Apolloner <florian@apolloner.eu> | 2012-07-30 21:58:22 +0200 |
| commit | b2eb4787a0fff9c9993b78be5c698e85108f3446 (patch) | |
| tree | 8a5ef7a5094b9dcd37b96e34afdc4a9a4bfb6a27 /django | |
| parent | 9ca0ff6268eeff92d0d0ac2c315d4b6a8e229155 (diff) | |
[1.3.x] Fixed second security issue in image uploading. Disclosure and release forthcoming.
Backport of b1d463468694f2e91fde67221b7996e9c52a9720 from master.
Diffstat (limited to 'django')
| -rw-r--r-- | django/forms/fields.py | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py index ae6d8a41bc..67ab4c5026 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -538,20 +538,10 @@ class ImageField(FileField): file = StringIO(data['content']) try: - # load() is the only method that can spot a truncated JPEG, - # but it cannot be called sanely after verify() - trial_image = Image.open(file) - trial_image.load() - - # Since we're about to use the file again we have to reset the - # file object if possible. - if hasattr(file, 'reset'): - file.reset() - - # verify() is the only method that can spot a corrupt PNG, - # but it must be called immediately after the constructor - trial_image = Image.open(file) - trial_image.verify() + # load() could spot a truncated JPEG, but it loads the entire + # image in memory, which is a DoS vector. See #3848 and #18520. + # verify() must be called immediately after the constructor. + Image.open(file).verify() except ImportError: # Under PyPy, it is possible to import PIL. However, the underlying # _imaging C module isn't available, so an ImportError will be |
