diff options
| author | nagachika <nagachika@ruby-lang.org> | 2023-09-24 14:16:10 +0900 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2023-09-24 14:16:10 +0900 |
| commit | 9cd28caa7cc3b0d987db7c1231fe101fb3b27399 (patch) | |
| tree | 0aa1d9355eb8aad49c5987b9ac3a2cf67a4eac7a /process.c | |
| parent | 217ef2bf89b3861e83c2e2a3a633c019f0731de6 (diff) | |
merge revision(s) 901b6d9c5025a30b3d7a5ed0a2c00baf9cfb061d: [Backport #19853]
Validate the typed data before dereferencing the internal struct.
(#8315)
---
process.c | 5 +++--
test/fiber/test_process.rb | 21 +++++++++++++++++++++
2 files changed, 24 insertions(+), 2 deletions(-)
Diffstat (limited to 'process.c')
| -rw-r--r-- | process.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -1436,7 +1436,7 @@ rb_waitpid(rb_pid_t pid, int *st, int flags) VALUE status = rb_process_status_wait(pid, flags); if (NIL_P(status)) return 0; - struct rb_process_status *data = RTYPEDDATA_DATA(status); + struct rb_process_status *data = rb_check_typeddata(status, &rb_process_status_type); pid = data->pid; if (st) *st = data->status; @@ -4853,7 +4853,8 @@ rb_f_system(int argc, VALUE *argv, VALUE _) if (pid > 0) { VALUE status = rb_process_status_wait(pid, 0); - struct rb_process_status *data = RTYPEDDATA_DATA(status); + + struct rb_process_status *data = rb_check_typeddata(status, &rb_process_status_type); // Set the last status: rb_obj_freeze(status); |
