diff options
author | Matthew <coletdjnz@protonmail.com> | 2023-01-02 06:05:13 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-02 06:05:13 +0000 |
commit | 8300774c4a32cc21b56088869a720fbbc0eb288a (patch) | |
tree | 8fd021f202209929969990da778a1b8d0e440af6 | |
parent | d7f98714696a4c9691ed28fb9b63395b9227646a (diff) | |
download | hypervideo-pre-8300774c4a32cc21b56088869a720fbbc0eb288a.tar.lz hypervideo-pre-8300774c4a32cc21b56088869a720fbbc0eb288a.tar.xz hypervideo-pre-8300774c4a32cc21b56088869a720fbbc0eb288a.zip |
Add `--enable-file-urls` (#5917)
Closes https://github.com/yt-dlp/yt-dlp/issues/3675
Authored by: coletdjnz
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | yt_dlp/YoutubeDL.py | 10 | ||||
-rw-r--r-- | yt_dlp/__init__.py | 1 | ||||
-rw-r--r-- | yt_dlp/options.py | 5 |
4 files changed, 15 insertions, 3 deletions
@@ -419,6 +419,8 @@ You can also fork the project on GitHub and run your fork's [build workflow](.gi --source-address IP Client-side IP address to bind to -4, --force-ipv4 Make all connections via IPv4 -6, --force-ipv6 Make all connections via IPv6 + --enable-file-urls Enable file:// URLs. This is disabled by + default for security reasons. ## Geo-restriction: --geo-verification-proxy URL Use this proxy to verify the IP address for diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py index e7b469059..7dc88e8a6 100644 --- a/yt_dlp/YoutubeDL.py +++ b/yt_dlp/YoutubeDL.py @@ -318,6 +318,7 @@ class YoutubeDL: If not provided and the key is encrypted, yt-dlp will ask interactively prefer_insecure: Use HTTP instead of HTTPS to retrieve information. (Only supported by some extractors) + enable_file_urls: Enable file:// URLs. This is disabled by default for security reasons. http_headers: A dictionary of custom headers to be used for all requests proxy: URL of the proxy server to use geo_verification_proxy: URL of the proxy to use for IP address verification @@ -3875,9 +3876,12 @@ class YoutubeDL: # https://github.com/ytdl-org/youtube-dl/issues/8227) file_handler = urllib.request.FileHandler() - def file_open(*args, **kwargs): - raise urllib.error.URLError('file:// scheme is explicitly disabled in yt-dlp for security reasons') - file_handler.file_open = file_open + if not self.params.get('enable_file_urls'): + def file_open(*args, **kwargs): + raise urllib.error.URLError( + 'file:// URLs are explicitly disabled in yt-dlp for security reasons. ' + 'Use --enable-file-urls to enable at your own risk.') + file_handler.file_open = file_open opener = urllib.request.build_opener( proxy_handler, https_handler, cookie_processor, ydlh, redirect_handler, data_handler, file_handler) diff --git a/yt_dlp/__init__.py b/yt_dlp/__init__.py index 9cb132410..2e35db1ba 100644 --- a/yt_dlp/__init__.py +++ b/yt_dlp/__init__.py @@ -855,6 +855,7 @@ def parse_options(argv=None): 'legacyserverconnect': opts.legacy_server_connect, 'nocheckcertificate': opts.no_check_certificate, 'prefer_insecure': opts.prefer_insecure, + 'enable_file_urls': opts.enable_file_urls, 'http_headers': opts.headers, 'proxy': opts.proxy, 'socket_timeout': opts.socket_timeout, diff --git a/yt_dlp/options.py b/yt_dlp/options.py index 5bbb292de..feb4b261d 100644 --- a/yt_dlp/options.py +++ b/yt_dlp/options.py @@ -516,6 +516,11 @@ def create_parser(): action='store_const', const='::', dest='source_address', help='Make all connections via IPv6', ) + network.add_option( + '--enable-file-urls', action='store_true', + dest='enable_file_urls', default=False, + help='Enable file:// URLs. This is disabled by default for security reasons.' + ) geo = optparse.OptionGroup(parser, 'Geo-restriction') geo.add_option( |