mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 10:27:07 -05:00 
			
		
		
		
	[YoutubeDL] Don't expand env variables in meta fields (closes #13637)
This commit is contained in:
		@@ -527,6 +527,8 @@ class TestYoutubeDL(unittest.TestCase):
 | 
			
		||||
            'ext': 'mp4',
 | 
			
		||||
            'width': None,
 | 
			
		||||
            'height': 1080,
 | 
			
		||||
            'title1': '$PATH',
 | 
			
		||||
            'title2': '%PATH%',
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        def fname(templ):
 | 
			
		||||
@@ -545,10 +547,14 @@ class TestYoutubeDL(unittest.TestCase):
 | 
			
		||||
        self.assertEqual(fname('%(height)0 6d.%(ext)s'), ' 01080.mp4')
 | 
			
		||||
        self.assertEqual(fname('%(height)0   6d.%(ext)s'), ' 01080.mp4')
 | 
			
		||||
        self.assertEqual(fname('%(height)   0   6d.%(ext)s'), ' 01080.mp4')
 | 
			
		||||
        self.assertEqual(fname('%%'), '%')
 | 
			
		||||
        self.assertEqual(fname('%%%%'), '%%')
 | 
			
		||||
        self.assertEqual(fname('%%(height)06d.%(ext)s'), '%(height)06d.mp4')
 | 
			
		||||
        self.assertEqual(fname('%(width)06d.%(ext)s'), 'NA.mp4')
 | 
			
		||||
        self.assertEqual(fname('%(width)06d.%%(ext)s'), 'NA.%(ext)s')
 | 
			
		||||
        self.assertEqual(fname('%%(width)06d.%(ext)s'), '%(width)06d.mp4')
 | 
			
		||||
        self.assertEqual(fname('Hello %(title1)s'), 'Hello $PATH')
 | 
			
		||||
        self.assertEqual(fname('Hello %(title2)s'), 'Hello %PATH%')
 | 
			
		||||
 | 
			
		||||
    def test_format_note(self):
 | 
			
		||||
        ydl = YoutubeDL()
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@ import re
 | 
			
		||||
import shutil
 | 
			
		||||
import subprocess
 | 
			
		||||
import socket
 | 
			
		||||
import string
 | 
			
		||||
import sys
 | 
			
		||||
import time
 | 
			
		||||
import tokenize
 | 
			
		||||
@@ -674,7 +675,19 @@ class YoutubeDL(object):
 | 
			
		||||
                        FORMAT_RE.format(numeric_field),
 | 
			
		||||
                        r'%({0})s'.format(numeric_field), outtmpl)
 | 
			
		||||
 | 
			
		||||
            filename = expand_path(outtmpl % template_dict)
 | 
			
		||||
            # expand_path translates '%%' into '%' and '$$' into '$'
 | 
			
		||||
            # correspondingly that is not what we want since we need to keep
 | 
			
		||||
            # '%%' intact for template dict substitution step. Working around
 | 
			
		||||
            # with boundary-alike separator hack.
 | 
			
		||||
            sep = ''.join([random.choice(string.ascii_letters) for _ in range(32)])
 | 
			
		||||
            outtmpl = outtmpl.replace('%%', '%{0}%'.format(sep)).replace('$$', '${0}$'.format(sep))
 | 
			
		||||
 | 
			
		||||
            # outtmpl should be expand_path'ed before template dict substitution
 | 
			
		||||
            # because meta fields may contain env variables we don't want to
 | 
			
		||||
            # be expanded. For example, for outtmpl "%(title)s.%(ext)s" and
 | 
			
		||||
            # title "Hello $PATH", we don't want `$PATH` to be expanded.
 | 
			
		||||
            filename = expand_path(outtmpl).replace(sep, '') % template_dict
 | 
			
		||||
 | 
			
		||||
            # Temporary fix for #4787
 | 
			
		||||
            # 'Treat' all problem characters by passing filename through preferredencoding
 | 
			
		||||
            # to workaround encoding issues with subprocess on python2 @ Windows
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user