]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-127146: Report uid in Emscripten + node as native uid (#136509)
authorHood Chatham <roberthoodchatham@gmail.com>
Wed, 16 Jul 2025 04:17:16 +0000 (06:17 +0200)
committerGitHub <noreply@github.com>
Wed, 16 Jul 2025 04:17:16 +0000 (06:17 +0200)
Corrects the handling of getuid on emscripten, which was consistently reporting as 0.

Python/emscripten_syscalls.c [new file with mode: 0644]
Tools/c-analyzer/cpython/_parser.py
configure
configure.ac

diff --git a/Python/emscripten_syscalls.c b/Python/emscripten_syscalls.c
new file mode 100644 (file)
index 0000000..7875bfc
--- /dev/null
@@ -0,0 +1,19 @@
+#include "emscripten.h"
+
+// If we're running in node, report the UID of the user in the native system as
+// the UID of the user. Since the nodefs will report the uid correctly, if we
+// don't make getuid report it correctly too we'll see some permission errors.
+// Normally __syscall_getuid32 is a stub that always returns 0 but it is
+// defined with weak linkage so we can override it.
+EM_JS(int, __syscall_getuid32_js, (void), {
+    // If we're in node and we can, report the native uid
+    if (typeof process !== "undefined" && typeof process.getuid === "function") {
+        return process.getuid();
+    }
+    // Fall back to the stub case of returning 0.
+    return 0;
+})
+
+int __syscall_getuid32(void) {
+    return __syscall_getuid32_js();
+}
index 037fe11ea223c793e68749bc0d87085d6fbf2618..cfbf0d143484993a43e6f742ec9522bd7844039d 100644 (file)
@@ -66,6 +66,7 @@ Python/dynload_aix.c            # sys/ldr.h
 Python/dynload_dl.c             # dl.h
 Python/dynload_hpux.c           # dl.h
 Python/emscripten_signal.c
+Python/emscripten_syscalls.c
 Python/thread_pthread.h
 Python/thread_pthread_stubs.h
 
index 71d831e4d8a6bb91ef1b153b94c7e8745247225f..3570eecdcef94f40c8160c4b79665e295ecba001 100755 (executable)
--- a/configure
+++ b/configure
@@ -19061,7 +19061,7 @@ PLATFORM_OBJS=
 case $ac_sys_system in #(
   Emscripten) :
 
-    as_fn_append PLATFORM_OBJS ' Python/emscripten_signal.o Python/emscripten_trampoline.o'
+    as_fn_append PLATFORM_OBJS ' Python/emscripten_signal.o Python/emscripten_trampoline.o Python/emscripten_syscalls.o'
     as_fn_append PLATFORM_HEADERS ' $(srcdir)/Include/internal/pycore_emscripten_signal.h $(srcdir)/Include/internal/pycore_emscripten_trampoline.h'
    ;; #(
   *) :
index 91c26f34a524c1019dc033e32401b06c1f0bf7de..3566c4b9038c2bcfbb3a914c404a249067ba8654 100644 (file)
@@ -5121,7 +5121,7 @@ PLATFORM_OBJS=
 
 AS_CASE([$ac_sys_system],
   [Emscripten], [
-    AS_VAR_APPEND([PLATFORM_OBJS], [' Python/emscripten_signal.o Python/emscripten_trampoline.o'])
+    AS_VAR_APPEND([PLATFORM_OBJS], [' Python/emscripten_signal.o Python/emscripten_trampoline.o Python/emscripten_syscalls.o'])
     AS_VAR_APPEND([PLATFORM_HEADERS], [' $(srcdir)/Include/internal/pycore_emscripten_signal.h $(srcdir)/Include/internal/pycore_emscripten_trampoline.h'])
   ],
 )