gh-127146: Report uid in Emscripten + node as native uid (#136509)

Corrects the handling of getuid on emscripten, which was consistently reporting as 0.
This commit is contained in:
Hood Chatham 2025-07-16 06:17:16 +02:00 committed by GitHub
parent cb59eaefed
commit e81c4e84b3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 22 additions and 2 deletions

View file

@ -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();
}

View 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

2
configure generated vendored
View file

@ -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'
;; #(
*) :

View 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'])
],
)