Skip to content

Commit

Permalink
Add --enable-file-urls (#5917)
Browse files Browse the repository at this point in the history
Closes #3675

Authored by: coletdjnz
  • Loading branch information
coletdjnz committed Jan 2, 2023
1 parent d7f9871 commit 8300774
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 3 deletions.
2 changes: 2 additions & 0 deletions README.md
Expand Up @@ -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
Expand Down
10 changes: 7 additions & 3 deletions yt_dlp/YoutubeDL.py
Expand Up @@ -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
Expand Down Expand Up @@ -3875,9 +3876,12 @@ def _setup_opener(self):
# 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)
Expand Down
1 change: 1 addition & 0 deletions yt_dlp/__init__.py
Expand Up @@ -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,
Expand Down
5 changes: 5 additions & 0 deletions yt_dlp/options.py
Expand Up @@ -516,6 +516,11 @@ def _alias_callback(option, opt_str, value, parser, opts, nargs):
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(
Expand Down

0 comments on commit 8300774

Please sign in to comment.