about summary refs log tree commit diff stats
path: root/crates/yt_dlp/src/package_hacks
diff options
context:
space:
mode:
Diffstat (limited to 'crates/yt_dlp/src/package_hacks')
-rw-r--r--crates/yt_dlp/src/package_hacks/mod.rs1
-rw-r--r--crates/yt_dlp/src/package_hacks/urllib3.rs25
-rw-r--r--crates/yt_dlp/src/package_hacks/urllib3_polyfill.py3
3 files changed, 29 insertions, 0 deletions
diff --git a/crates/yt_dlp/src/package_hacks/mod.rs b/crates/yt_dlp/src/package_hacks/mod.rs
new file mode 100644
index 0000000..0327dfa
--- /dev/null
+++ b/crates/yt_dlp/src/package_hacks/mod.rs
@@ -0,0 +1 @@
+pub(super) mod urllib3;
diff --git a/crates/yt_dlp/src/package_hacks/urllib3.rs b/crates/yt_dlp/src/package_hacks/urllib3.rs
new file mode 100644
index 0000000..68a94aa
--- /dev/null
+++ b/crates/yt_dlp/src/package_hacks/urllib3.rs
@@ -0,0 +1,25 @@
+use rustpython::vm::{PyResult, VirtualMachine};
+
+// NOTE(@bpeetz): Remove this, once rust-python supports these features. <2025-06-27>
+pub(crate) fn apply_hacks(vm: &VirtualMachine) -> PyResult<()> {
+    {
+        // Urllib3 tries to import this value, regardless if it is set.
+        let ssl_module = vm.import("ssl", 0)?;
+        ssl_module.set_attr("VERIFY_X509_STRICT", vm.ctx.new_int(0x20), vm)?;
+    }
+
+    {
+        // Urllib3 tries to set the SSLContext.verify_flags value, regardless if it exists or not.
+        // So we need to provide a polyfill.
+
+        let scope = vm.new_scope_with_builtins();
+
+        vm.run_code_string(
+            scope,
+            include_str!("urllib3_polyfill.py"),
+            "<embedded urllib3 polyfill workaround code>".to_owned(),
+        )?;
+    }
+
+    Ok(())
+}
diff --git a/crates/yt_dlp/src/package_hacks/urllib3_polyfill.py b/crates/yt_dlp/src/package_hacks/urllib3_polyfill.py
new file mode 100644
index 0000000..760b200
--- /dev/null
+++ b/crates/yt_dlp/src/package_hacks/urllib3_polyfill.py
@@ -0,0 +1,3 @@
+import ssl
+
+ssl.SSLContext.verify_flags = 0