mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-06 16:38:43 +00:00
[#3070] Fix httpdownloader error with missing content-disposition filename
The parsing of the content-disposition in httpdownloader was not able to handle missing parameters e.g. "Content-Disposition: attachment" and would result in an IndexError. Added a test for this use-case. Fixed the issue using the cgi.parse_header to extract the parameters.
This commit is contained in:
parent
396417bcd0
commit
ffb8d9f8c3
1 changed files with 16 additions and 12 deletions
|
@ -38,6 +38,7 @@ from twisted.python.failure import Failure
|
||||||
from twisted.internet import reactor
|
from twisted.internet import reactor
|
||||||
from deluge.log import setupLogger, LOG as log
|
from deluge.log import setupLogger, LOG as log
|
||||||
from common import get_version
|
from common import get_version
|
||||||
|
import cgi
|
||||||
import os.path
|
import os.path
|
||||||
import zlib
|
import zlib
|
||||||
|
|
||||||
|
@ -86,20 +87,23 @@ class HTTPDownloader(client.HTTPDownloader):
|
||||||
self.decoder = zlib.decompressobj(zlib.MAX_WBITS + 32)
|
self.decoder = zlib.decompressobj(zlib.MAX_WBITS + 32)
|
||||||
|
|
||||||
if "content-disposition" in headers and not self.force_filename:
|
if "content-disposition" in headers and not self.force_filename:
|
||||||
new_file_name = str(headers["content-disposition"][0]).split(";")[1].split("=")[1]
|
content_disp = str(headers["content-disposition"][0])
|
||||||
new_file_name = sanitise_filename(new_file_name)
|
content_disp_params = cgi.parse_header(content_disp)[1]
|
||||||
new_file_name = os.path.join(os.path.split(self.fileName)[0], new_file_name)
|
if "filename" in content_disp_params:
|
||||||
|
new_file_name = content_disp_params["filename"]
|
||||||
|
new_file_name = sanitise_filename(new_file_name)
|
||||||
|
new_file_name = os.path.join(os.path.split(self.fileName)[0], new_file_name)
|
||||||
|
|
||||||
count = 1
|
count = 1
|
||||||
fileroot = os.path.splitext(new_file_name)[0]
|
fileroot = os.path.splitext(new_file_name)[0]
|
||||||
fileext = os.path.splitext(new_file_name)[1]
|
fileext = os.path.splitext(new_file_name)[1]
|
||||||
while os.path.isfile(new_file_name):
|
while os.path.isfile(new_file_name):
|
||||||
# Increment filename if already exists
|
# Increment filename if already exists
|
||||||
new_file_name = "%s-%s%s" % (fileroot, count, fileext)
|
new_file_name = "%s-%s%s" % (fileroot, count, fileext)
|
||||||
count += 1
|
count += 1
|
||||||
|
|
||||||
self.fileName = new_file_name
|
self.fileName = new_file_name
|
||||||
self.value = new_file_name
|
self.value = new_file_name
|
||||||
|
|
||||||
elif self.code in (http.MOVED_PERMANENTLY, http.FOUND, http.SEE_OTHER, http.TEMPORARY_REDIRECT):
|
elif self.code in (http.MOVED_PERMANENTLY, http.FOUND, http.SEE_OTHER, http.TEMPORARY_REDIRECT):
|
||||||
location = headers["location"][0]
|
location = headers["location"][0]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue