https://github.com/python/cpython/commit/cdf98c3b7ebca89ae2ece1d30f21ee4adc0ef92e
commit: cdf98c3b7ebca89ae2ece1d30f21ee4adc0ef92e
branch: 3.14
author: Miss Islington (bot) <31488909+miss-isling...@users.noreply.github.com>
committer: freakboy3742 <russ...@keith-magee.com>
date: 2025-07-16T06:50:51+02:00
summary:

[3.14] gh-127146: Report uid in Emscripten + node as native uid (GH-136509) 
(#136699)

Corrects the handling of getuid on emscripten, which was consistently reporting 
as 0.
(cherry picked from commit e81c4e84b3a8688a367099e3adf9b2fcf914447f)

Co-authored-by: Hood Chatham <roberthoodchat...@gmail.com>

files:
A Python/emscripten_syscalls.c
M Tools/c-analyzer/cpython/_parser.py
M configure
M configure.ac

diff --git a/Python/emscripten_syscalls.c b/Python/emscripten_syscalls.c
new file mode 100644
index 00000000000000..7875bfc8fe56ae
--- /dev/null
+++ b/Python/emscripten_syscalls.c
@@ -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();
+}
diff --git a/Tools/c-analyzer/cpython/_parser.py 
b/Tools/c-analyzer/cpython/_parser.py
index 037fe11ea223c7..cfbf0d14348499 100644
--- a/Tools/c-analyzer/cpython/_parser.py
+++ b/Tools/c-analyzer/cpython/_parser.py
@@ -66,6 +66,7 @@ def clean_lines(text):
 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
 
diff --git a/configure b/configure
index 67a40b841aa506..2242865313e57c 100755
--- a/configure
+++ b/configure
@@ -19077,7 +19077,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'
    ;; #(
   *) :
diff --git a/configure.ac b/configure.ac
index bbd0fa8c1ae8f6..a05b3b18efec36 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5131,7 +5131,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'])
   ],
 )

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: arch...@mail-archive.com

Reply via email to