ruby/bootstraptest
John Hawthorn 18573b8d05 Avoid reading unused lvars in Primitive.cexpr
Previously on builds with optimizations disabled, this could result in
an out of bounds read. When we had all of:
* built with -O0
* Leaf builtin
* Primitive.mandatory_only
* "no args builtin", called by vm_call_single_noarg_inline_builti
* The stack is escaped to the heap via binding or a proc

This is because mk_builtin_loader generated reads for all locals
regardless of whether they were used and in the case we generated a
mandatory_only iseq that would include more variables than were actually
available.

On optimized builds, the invalid accesses would be optimized away, and
this also was often unnoticed as the invalid access would just hit
another part of the stack unless it had been escaped to the heap.

The fix here is imperfect, as this could have false positives, but since
Primitive.cexpr! is only available within the cruby codebase itself
that's probably fine as a proper fix would be much more challenging (the
only false positives we found were in rjit.rb).

Fixes [Bug #20178]

Co-authored-by: Adam Hess <HParker@github.com>
2024-01-11 16:53:20 -08:00
..
pending.rb Moved already resolved test 2020-04-27 10:39:07 +09:00
runner.rb RJIT: Streamline RJIT enablement check 2023-12-21 14:32:03 -08:00
test_attr.rb Revert "Revert "This commit implements the Object Shapes technique in CRuby."" 2022-10-11 08:40:56 -07:00
test_autoload.rb support concurrent btest execution 2022-02-06 03:05:47 +09:00
test_block.rb
test_class.rb
test_constant_cache.rb Finer-grained constant cache invalidation (take 2) 2022-04-01 14:48:22 -04:00
test_env.rb fallback env encoding to ASCII-8BIT 2018-09-26 17:24:00 +00:00
test_eval.rb Avoid underflow of rb_yjit_live_iseq_count 2023-12-21 20:43:01 -08:00
test_exception.rb error.c: bypass Exception.new 2018-02-20 10:08:27 +00:00
test_fiber.rb support concurrent btest execution 2022-02-06 03:05:47 +09:00
test_finalizer.rb
test_flip.rb
test_flow.rb Make proc/Proc.new without block an error instead of warning 2020-06-10 17:49:54 -07:00
test_fork.rb bootstraptest/test_fork.rb: Stop too restrict NPROC test temporarily 2018-01-09 08:05:40 +00:00
test_gc.rb RJIT: Streamline RJIT enablement check 2023-12-21 14:32:03 -08:00
test_insns.rb Emit special instruction for array literal + .(hash|min|max) 2023-04-18 17:16:22 -07:00
test_io.rb omit random failure in bootstraptest with freebsd 2022-09-06 16:27:12 +09:00
test_jump.rb btest: assign $stderr = STDOUT instead of IO#reopen to be more portable 2021-12-16 16:16:40 +09:00
test_literal.rb [wasm] bootstraptest, basictest: disable backquote literal tests 2022-01-19 11:19:06 +09:00
test_literal_suffix.rb parse.y: more token names 2019-01-21 10:24:56 +00:00
test_load.rb Skip a flaky test that might not work 2023-03-17 09:06:52 -07:00
test_marshal.rb
test_massign.rb
test_method.rb Avoid reading unused lvars in Primitive.cexpr 2024-01-11 16:53:20 -08:00
test_objectspace.rb Use a monotonically increasing number for object_id 2019-11-07 09:31:07 -08:00
test_proc.rb Make proc/Proc.new without block an error instead of warning 2020-06-10 17:49:54 -07:00
test_ractor.rb Set Ractor moved object's shape to original object's shape 2024-01-02 08:10:59 +09:00
test_rjit.rb RJIT: Fix unwanted shadowing in set_local_type 2023-12-21 15:48:37 -08:00
test_string.rb
test_struct.rb
test_syntax.rb [Bug #19882] Reject tokens invalid as symbols 2023-09-15 17:27:36 +09:00
test_thread.rb RJIT: Streamline RJIT enablement check 2023-12-21 14:32:03 -08:00
test_yjit.rb Typofix under bootstraptest, spec and yjit directories 2023-12-25 13:50:23 +09:00
test_yjit_30k_ifelse.rb * append newline at EOF. [ci skip] 2021-10-21 08:12:53 +09:00
test_yjit_30k_methods.rb * append newline at EOF. [ci skip] 2021-10-21 08:12:53 +09:00
test_yjit_rust_port.rb Rust YJIT 2022-04-27 11:00:22 -04:00