Skip to content

gh-124621: Emscripten: Fix regression in use-after-close error handling #136837

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

Merged
merged 1 commit into from
Jul 19, 2025
Merged
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
gh-124621: Emscripten: Fix regression in use-after-close error handling
Introduced in GH-136822. If the fd is already closed,
`SYSCALLS.getStreamFromFD()` throws an error. We need to catch it and
discard it. The `__wasi_fd_read_orig()` fallback will use it to set errno.
  • Loading branch information
hoodmane committed Jul 19, 2025
commit eea3a6084930f965d9e4e583d80f55bb064fd01c
9 changes: 8 additions & 1 deletion Python/emscripten_syscalls.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,10 +148,17 @@ EM_JS_MACROS(__externref_t, __maybe_fd_read_async, (
size_t iovcnt,
__wasi_size_t *nread
), {
var stream = SYSCALLS.getStreamFromFD(fd);
if (!WebAssembly.promising) {
return null;
}
var stream;
try {
stream = SYSCALLS.getStreamFromFD(fd);
} catch (e) {
// If the fd was already closed or never existed, getStreamFromFD()
// raises. We'll let fd_read_orig() handle setting errno.
return null;
}
if (!stream.stream_ops.readAsync) {
// Not an async device. Fall back to __wasi_fd_read_orig().
return null;
Expand Down
Loading