diff options
author | Yusuke Endoh <[email protected]> | 2025-01-20 17:41:08 +0900 |
---|---|---|
committer | Yusuke Endoh <[email protected]> | 2025-02-18 16:23:24 +0900 |
commit | 993fd96ce6bb763e08207bb3d53824d5d46d07a4 (patch) | |
tree | 1794e9e8411c5bfd139d0b730642c8678e9bf07f /vm.c | |
parent | 6d75599a1aade9f8081d0691a9da1e62a5428e95 (diff) |
reject numbered parameters from Binding#local_variables
Also, Binding#local_variable_get and #local_variable_set rejects an
access to numbered parameters.
[Bug #20965] [Bug #21049]
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/12746
Diffstat (limited to 'vm.c')
-rw-r--r-- | vm.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -1107,6 +1107,21 @@ rb_vm_env_local_variables(const rb_env_t *env) } VALUE +rb_vm_env_numbered_parameters(const rb_env_t *env) +{ + struct local_var_list vars; + local_var_list_init(&vars); + // if (VM_ENV_FLAGS(env->ep, VM_ENV_FLAG_ISOLATED)) break; // TODO: is this needed? + const rb_iseq_t *iseq = env->iseq; + unsigned int i; + if (!iseq) return 0; + for (i = 0; i < ISEQ_BODY(iseq)->local_table_size; i++) { + numparam_list_add(&vars, ISEQ_BODY(iseq)->local_table[i]); + } + return local_var_list_finish(&vars); +} + +VALUE rb_iseq_local_variables(const rb_iseq_t *iseq) { struct local_var_list vars; |