From 4136847b0006e6814deeb7eb6c3d9e1cdd48e347 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 4 May 2025 19:33:55 +0300 Subject: [PATCH 1/2] gh-81793: Skip tests for os.link(follow_links=) on Android --- Lib/test/test_posix.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index bb18e49c9e3f82..6d366a1447675c 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -1549,6 +1549,10 @@ def test_link_follow_symlinks(self): except NotImplementedError: if os.link in os.supports_follow_symlinks or default_no_follow: raise + except PermissionError: + if sys.platform == 'android': + self.skipTest('Android blocks follow_symlinks with SELinux') + raise else: self.addCleanup(os_helper.unlink, link) self.assertEqual(posix.lstat(link), posix.lstat(symlink)) @@ -1561,6 +1565,10 @@ def test_link_follow_symlinks(self): except NotImplementedError: if os.link in os.supports_follow_symlinks or default_follow: raise + except PermissionError: + if sys.platform == 'android': + self.skipTest('Android blocks follow_symlinks with SELinux') + raise else: self.addCleanup(os_helper.unlink, link) self.assertEqual(posix.lstat(link), posix.lstat(orig)) From 312e1933afd65251d92471d6e31fa4df6f70984d Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 4 May 2025 19:52:35 +0300 Subject: [PATCH 2/2] Do not use linkat() on Android. --- Lib/test/test_posix.py | 8 -------- Modules/posixmodule.c | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 6d366a1447675c..bb18e49c9e3f82 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -1549,10 +1549,6 @@ def test_link_follow_symlinks(self): except NotImplementedError: if os.link in os.supports_follow_symlinks or default_no_follow: raise - except PermissionError: - if sys.platform == 'android': - self.skipTest('Android blocks follow_symlinks with SELinux') - raise else: self.addCleanup(os_helper.unlink, link) self.assertEqual(posix.lstat(link), posix.lstat(symlink)) @@ -1565,10 +1561,6 @@ def test_link_follow_symlinks(self): except NotImplementedError: if os.link in os.supports_follow_symlinks or default_follow: raise - except PermissionError: - if sys.platform == 'android': - self.skipTest('Android blocks follow_symlinks with SELinux') - raise else: self.addCleanup(os_helper.unlink, link) self.assertEqual(posix.lstat(link), posix.lstat(orig)) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 964e988843110e..a03d2b2037529a 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -573,7 +573,7 @@ extern char *ctermid_r(char *); # define HAVE_FACCESSAT_RUNTIME 1 # define HAVE_FCHMODAT_RUNTIME 1 # define HAVE_FCHOWNAT_RUNTIME 1 -#ifdef __wasi__ +#if defined(__wasi__) || defined(__ANDROID__) # define HAVE_LINKAT_RUNTIME 0 # else # define HAVE_LINKAT_RUNTIME 1