diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py index 85bf6e1d48e..cc8ba05d39c 100644 --- a/Lib/test/libregrtest/main.py +++ b/Lib/test/libregrtest/main.py @@ -600,6 +600,16 @@ class Regrtest: for s in ET.tostringlist(root): f.write(s) + def fix_umask(self): + if support.is_emscripten: + # Emscripten has default umask 0o777, which breaks some tests. + # see https://github.com/emscripten-core/emscripten/issues/17269 + old_mask = os.umask(0) + if old_mask == 0o777: + os.umask(0o027) + else: + os.umask(old_mask) + def set_temp_dir(self): if self.ns.tempdir: self.tmp_dir = self.ns.tempdir @@ -660,6 +670,8 @@ class Regrtest: self.set_temp_dir() + self.fix_umask() + if self.ns.cleanup: self.cleanup() sys.exit(0) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 4130cdd0c02..ae25ef55885 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -787,6 +787,7 @@ class PosixTester(unittest.TestCase): check_stat(uid, gid) @os_helper.skip_unless_working_chmod + @unittest.skipIf(support.is_emscripten, "getgid() is a stub") def test_chown(self): # raise an OSError if the file does not exist os.unlink(os_helper.TESTFN) @@ -798,6 +799,7 @@ class PosixTester(unittest.TestCase): @os_helper.skip_unless_working_chmod @unittest.skipUnless(hasattr(posix, 'fchown'), "test needs os.fchown()") + @unittest.skipIf(support.is_emscripten, "getgid() is a stub") def test_fchown(self): os.unlink(os_helper.TESTFN) @@ -1356,6 +1358,7 @@ class TestPosixDirFd(unittest.TestCase): @unittest.skipUnless(hasattr(os, 'chown') and (os.chown in os.supports_dir_fd), "test needs dir_fd support in os.chown()") + @unittest.skipIf(support.is_emscripten, "getgid() is a stub") def test_chown_dir_fd(self): with self.prepare_file() as (dir_fd, name, fullname): posix.chown(name, os.getuid(), os.getgid(), dir_fd=dir_fd) diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index b705b7aee81..89faf0d9141 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -934,6 +934,7 @@ class PydocImportTest(PydocBaseTest): self.assertEqual(err.getvalue(), '') @os_helper.skip_unless_working_chmod + @unittest.skipIf(is_emscripten, "cannot remove x bit") def test_apropos_empty_doc(self): pkgdir = os.path.join(TESTFN, 'walkpkg') os.mkdir(pkgdir) diff --git a/Tools/wasm/config.site-wasm32-emscripten b/Tools/wasm/config.site-wasm32-emscripten index 6420edcf541..a31d60d05dd 100644 --- a/Tools/wasm/config.site-wasm32-emscripten +++ b/Tools/wasm/config.site-wasm32-emscripten @@ -43,6 +43,13 @@ ac_cv_func_symlinkat=no ac_cv_func_lchmod=no ac_cv_func_lchown=no +# geteuid / getegid are stubs and always return 0 (root). The stub breaks +# code that assume effective user root has special permissions. +ac_cv_func_geteuid=no +ac_cv_func_getegid=no +ac_cv_func_seteuid=no +ac_cv_func_setegid=no + # Syscalls not implemented in emscripten # [Errno 52] Function not implemented ac_cv_func_preadv2=no