From 8b73fe7a76c1a624ca48908089a62b8b3ce40f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Franch?= Date: Sun, 11 Oct 2026 17:11:35 +0200 Subject: [PATCH] fix(stubgen): give new output files the default umask permissions --- tools/stubgen.py | 5 +++++ tools/tests/test_stubgen.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/tools/stubgen.py b/tools/stubgen.py index d3c752b53..e12520f43 100644 --- a/tools/stubgen.py +++ b/tools/stubgen.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import argparse +import os import re import sys import tempfile @@ -177,6 +178,8 @@ def same_file(left, right): def write_outputs(outputs): staged = [] + umask = os.umask(0) + os.umask(umask) try: for filename, content in outputs: path = Path(filename).resolve() @@ -188,6 +191,8 @@ def write_outputs(outputs): handle.write(content) if path.exists(): temporary.chmod(path.stat().st_mode & 0o7777) + else: + temporary.chmod(0o666 & ~umask) for temporary, path in staged: temporary.replace(path) finally: diff --git a/tools/tests/test_stubgen.py b/tools/tests/test_stubgen.py index f8714e203..ae8d0d6bf 100644 --- a/tools/tests/test_stubgen.py +++ b/tools/tests/test_stubgen.py @@ -1,5 +1,6 @@ import contextlib import io +import os import tempfile from pathlib import Path import sys @@ -113,6 +114,10 @@ class StubGeneratorTests(unittest.TestCase): self.assertEqual(stubgen.main(arguments), 0) self.assertIn('APS5_EXPORT("AAAAAAAAAAA",', code.read_text(encoding="utf-8")) self.assertIn("unknown name, signature", debt.read_text(encoding="utf-8")) + if sys.platform != "win32": + mask = os.umask(0o022) + os.umask(mask) + self.assertEqual(code.stat().st_mode & 0o777, 0o666 & ~mask) if __name__ == "__main__":