summary refs log tree commit diff
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@kevo.io>2021-01-04 13:24:01 -0500
committerGitHub <noreply@github.com>2021-01-05 01:24:01 +0700
commit766fcdd0fad8495222b2b5a14f1626960cd79d89 (patch)
tree26118e663fc93aebd9e7b9020303dbab39fc84ee
parentf6ea29e24bf67d13d21de3c623975891a8d61ac1 (diff)
downloadyoutube-dl-766fcdd0fad8495222b2b5a14f1626960cd79d89.tar.gz
youtube-dl-766fcdd0fad8495222b2b5a14f1626960cd79d89.tar.xz
youtube-dl-766fcdd0fad8495222b2b5a14f1626960cd79d89.zip
[downloader/hls] Disable decryption in tests (#27660)
Tests truncate the download to 10241 bytes, which is not divisible by 16
and cannot be decrypted. Tests don't really care about the decrypted
content, just that the data they retrieved is the expected data.
Therefore, it's fine to just return the encrypted data to tests.

See: #27621 and #27620
-rw-r--r--youtube_dl/downloader/hls.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/youtube_dl/downloader/hls.py b/youtube_dl/downloader/hls.py
index 5e1ff4f6b..7aaebc940 100644
--- a/youtube_dl/downloader/hls.py
+++ b/youtube_dl/downloader/hls.py
@@ -172,8 +172,12 @@ class HlsFD(FragmentFD):
                         iv = decrypt_info.get('IV') or compat_struct_pack('>8xq', media_sequence)
                         decrypt_info['KEY'] = decrypt_info.get('KEY') or self.ydl.urlopen(
                             self._prepare_url(info_dict, info_dict.get('_decryption_key_url') or decrypt_info['URI'])).read()
-                        frag_content = AES.new(
-                            decrypt_info['KEY'], AES.MODE_CBC, iv).decrypt(frag_content)
+                        # Don't decrypt the content in tests since the data is explicitly truncated and it's not to a valid block
+                        # size (see https://github.com/ytdl-org/youtube-dl/pull/27660). Tests only care that the correct data downloaded,
+                        # not what it decrypts to.
+                        if not test:
+                            frag_content = AES.new(
+                                decrypt_info['KEY'], AES.MODE_CBC, iv).decrypt(frag_content)
                     self._append_fragment(ctx, frag_content)
                     # We only download the first fragment during the test
                     if test: