Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-84461: Fix Emscripten umask and permission issues (GH-94002) #94002

Merged
merged 1 commit into from
Jun 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions Lib/test/libregrtest/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -600,6 +600,16 @@ def save_xml_result(self):
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
Expand Down Expand Up @@ -660,6 +670,8 @@ def main(self, tests=None, **kwargs):

self.set_temp_dir()

self.fix_umask()

if self.ns.cleanup:
self.cleanup()
sys.exit(0)
Expand Down
3 changes: 3 additions & 0 deletions Lib/test/test_posix.py
Original file line number Diff line number Diff line change
Expand Up @@ -787,6 +787,7 @@ def check_stat(uid, gid):
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)
Expand All @@ -798,6 +799,7 @@ def test_chown(self):

@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)

Expand Down Expand Up @@ -1356,6 +1358,7 @@ def test_chmod_dir_fd(self):

@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)
Expand Down
1 change: 1 addition & 0 deletions Lib/test/test_pydoc.py
Original file line number Diff line number Diff line change
Expand Up @@ -934,6 +934,7 @@ def test_apropos_with_unreadable_dir(self):
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)
Expand Down
7 changes: 7 additions & 0 deletions Tools/wasm/config.site-wasm32-emscripten
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down