Commit Graph

5313 Commits

Author SHA1 Message Date
Yukihiro "Matz" Matsumoto f4fb41b528 kernel.c: regression on struct/array/hash == override with super; fix #6660
when overriding struct#==, array#==, or hash#== with super, the recursion
detection incorrectly treated the super call as a circular reference. this
was caused by commit 5ca2d442 which added recursion detection.

the fix introduces mrb_recursive_func_p that starts from ci[-2] instead of
ci[-1], skipping the immediate parent frame which may be a ruby override
calling super. equality methods (==, eql?) now use this function, while
inspect methods keep using mrb_recursive_method_p for immediate circular
reference detection.

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-12 10:25:37 +09:00
Yukihiro "Matz" Matsumoto 4795b7e3ca mruby-kernel-ext: add error helper function to eliminate goto
Add arg_error() helper function to replace goto statements used for
error handling. This function is marked with mrb_noreturn attribute
since it calls mrb_raise which never returns.

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-12 10:25:37 +09:00
Yukihiro "Matz" Matsumoto e0393943f1 mruby-io: add error helper functions to eliminate goto
Add mode_error() and badfd_error() helper functions to replace
goto statements used for error handling. These functions are marked
with mrb_noreturn attribute since they call mrb_raise/mrb_sys_fail
which never return.

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-12 10:25:36 +09:00
Yukihiro "Matz" Matsumoto ac103ac300 mruby-socket: add error helper function to eliminate goto
Add invalid_address_error() helper function to replace goto statements
used for error handling. This function is marked with mrb_noreturn
attribute since it calls mrb_raise() which never returns.

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-12 10:25:36 +09:00
Yukihiro "Matz" Matsumoto d1e8085a1e mruby-binding: add error helper functions to eliminate goto
Add badname_error() and caller_error() helper functions to replace
goto statements used for error handling. These functions are marked
with mrb_noreturn attribute since they call mrb_raise() which never
returns.

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-12 10:25:36 +09:00
Yukihiro "Matz" Matsumoto 150a8db053 mruby-array-ext: avoid goto in ary_slice_bang 2025-11-12 10:25:27 +09:00
Yukihiro "Matz" Matsumoto 704dfa01af mruby-array-ext: fix for some C++ compiler labels 2025-11-08 20:36:57 +09:00
Yukihiro "Matz" Matsumoto cc622f718c mruby-compiler: fix super with keyword arguments; fix #6659
allocate ** keyword dictionary register when methods have keyword
arguments (parse.y new_args_tail), broken in commit 26ea71260 during
cons-list to struct migration. reconstruct keyword hash after KEYEND
from extracted keyword local variables so super can access keyword
values. encode block parameter flag in ainfo bit 13 and generate
LOADNIL for block register in codegen_zsuper when parent has keywords
but no block parameter.

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-08 17:37:56 +09:00
Yukihiro "Matz" Matsumoto d8496fc9be mruby-bin-debugger: combine variable declaration with initialization 2025-11-08 14:30:13 +09:00
Yukihiro "Matz" Matsumoto e66c4d53aa mruby-bin-mirb: combine variable declaration with initialization 2025-11-08 14:29:34 +09:00
Yukihiro "Matz" Matsumoto 30c0ef6968 mruby-bin-mrbc: combine variable declaration with initialization 2025-11-08 14:29:06 +09:00
Yukihiro "Matz" Matsumoto 0485ecdb01 mruby-array-ext: combine variable declaration with initialization 2025-11-08 14:28:22 +09:00
Yukihiro "Matz" Matsumoto 00905566ac mruby-dir: combine variable declaration with initialization 2025-11-08 14:27:44 +09:00
Yukihiro "Matz" Matsumoto 4f33c0cc11 mruby-error: combine variable declaration with initialization 2025-11-08 14:26:49 +09:00
Yukihiro "Matz" Matsumoto 688380bec2 mruby-kernel-ext: combine variable declaration with initialization 2025-11-08 14:25:22 +09:00
Yukihiro "Matz" Matsumoto 75a2a59637 mruby-proc-binding: combine variable declaration with initialization 2025-11-08 14:24:40 +09:00
Yukihiro "Matz" Matsumoto e58c838c1d mruby-sprintf: combine variable declaration with initialization 2025-11-08 14:24:12 +09:00
Yukihiro "Matz" Matsumoto 6bcd433214 mruby-string-ext: combine variable declaration with initialization 2025-11-08 14:23:41 +09:00
Yukihiro "Matz" Matsumoto 7e2f20573c mruby-task: combine variable declaration with initialization 2025-11-08 14:14:44 +09:00
dearblue 0e653eb4c2 Fixed use-after-free with Set#join
The `mrb_obj_as_string()` function can call the `#to_s` method.
String addresses and string lengths obtained outside the `KSET_FOREACH()` loop may become invalid.
2025-11-04 22:09:08 +09:00
Yukihiro "Matz" Matsumoto 2c47e84cab Merge pull request #6656 from dearblue/combination_init.2 2025-10-29 11:01:29 +09:00
Yukihiro "Matz" Matsumoto e682b20f1d mruby-compiler: restore exception handling for ||= on class variables; fix #6657
Restore exception handling for `||=` operator on class variables and constants
that was inadvertently removed in commit 0ca48e24f. When reading an undefined
class variable with GETCV opcode raises NameError, the exception handler
catches it and loads false, allowing the assignment to proceed.

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-28 09:46:51 +09:00
Yukihiro "Matz" Matsumoto ec58dca22f mruby-array-ext: use Data_Make_Struct() in ary_combination_init
refactor to use the standard Data_Make_Struct() macro instead of manual
RData allocation and linking. the macro provides automatic zero-initialization
and is more idiomatic.

ref #6655

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-27 11:46:22 +09:00
Yukihiro "Matz" Matsumoto 16efbd5c91 Merge pull request #6655 from dearblue/combination_init 2025-10-27 11:43:26 +09:00
Yukihiro "Matz" Matsumoto ad51bf848b mrbgem.rake: simplify hal selection logic
remove redundant visualcpp and mingw checks since for_windows? already
detects all windows builds including visual c++ and mingw.

ref #6653

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-27 11:11:27 +09:00
Yukihiro "Matz" Matsumoto 28b567ae78 Merge pull request #6653 from dearblue/mingw
Improve HAL-related components for MinGW
2025-10-27 10:56:28 +09:00
Yukihiro "Matz" Matsumoto 88bfa0bec1 mruby-bigint: move pool handling from bint_set to mpz_move
refactored the stack-use-after-return fix to encapsulate pool memory
handling in mpz_move instead of bint_set, providing cleaner code and
automatic protection for all 22 callers of mpz_move; ref #6651

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-27 08:48:04 +09:00
Yukihiro "Matz" Matsumoto 6e89c433a8 Merge pull request #6651 from meder/meder-patch-2 2025-10-27 08:43:17 +09:00
Yukihiro "Matz" Matsumoto 40606418a9 mruby-array-ext: combine variable declaration with initialization 2025-10-27 08:38:17 +09:00
Yukihiro "Matz" Matsumoto 8455c41a74 mruby-compiler: combine variable declaration with initialization 2025-10-27 08:24:07 +09:00
Yukihiro "Matz" Matsumoto b6eb21cac0 mruby-errno: combine variable declaration with initialization 2025-10-27 07:59:20 +09:00
Yukihiro "Matz" Matsumoto 3872587ec2 mruby-eval: combine variable declaration with initialization 2025-10-27 07:45:40 +09:00
Yukihiro "Matz" Matsumoto 5a147838ba mruby-hash-ext: combine variable declaration with initialization 2025-10-26 23:52:20 +09:00
Yukihiro "Matz" Matsumoto e636360250 mruby-io: combine variable declaration with initialization 2025-10-26 23:48:38 +09:00
Yukihiro "Matz" Matsumoto d81d343f5b mruby-math: combine variable declaration with initialization 2025-10-26 23:30:14 +09:00
Yukihiro "Matz" Matsumoto 4eddd18ebb mruby-pack: combine variable declaration with initialization 2025-10-26 23:03:47 +09:00
dearblue c28223ac5b Fix integer overflow in allocation size calculation
Passing a large integer value as the first argument to `Array#ary_combination_init` could cause an incorrect memory allocation due to integer overflow.
This would result in an invalid write during the subsequent zero-fill of the memory.

To resolve the issue, it has been replaced with `mrb_calloc()`.
However, since the current `mrb_calloc()` returns `NULL` due to overflow, it has been modified to raise an exception as a clear error.
2025-10-26 21:02:20 +09:00
dearblue 2512b4b399 Preventing Memory Leaks in Array#__combination_init
If memory allocated with `mrb_malloc()` is not associated with an object, subsequent attempts to allocate memory or objects will fail and raise an exception, resulting in a memory leak.
2025-10-26 20:49:25 +09:00
Yukihiro "Matz" Matsumoto 87f406581b mruby-proc-ext: combine variable declaration with initialization 2025-10-26 20:33:06 +09:00
Yukihiro "Matz" Matsumoto 5d62acc3b8 mruby-sleep: combine variable declaration with initialization 2025-10-26 20:01:30 +09:00
Yukihiro "Matz" Matsumoto c1653debb1 mruby-socket: combine variable declaration with initialization 2025-10-26 20:00:04 +09:00
Yukihiro "Matz" Matsumoto 5b32cbf089 mruby-strftime: combine variable declaration with initialization 2025-10-26 19:16:12 +09:00
Yukihiro "Matz" Matsumoto f5cfb53b2e mruby-string-ext: combine variable declaration with initialization 2025-10-26 19:12:35 +09:00
Yukihiro "Matz" Matsumoto 19d545688d mruby-struct: combine variable declaration with initialization 2025-10-26 19:10:37 +09:00
Yukihiro "Matz" Matsumoto def463962e mruby-task: combine variable declaration with initialization 2025-10-26 19:05:01 +09:00
dearblue ea215bc19c Fixed HAL auto-detection order
Because MinGW was not recognized as Windows during cross-builds.
2025-10-25 21:06:16 +09:00
dearblue 80e9105afb Explicitly include errno.h
This is required for `ENOSYS`.
2025-10-25 21:05:39 +09:00
dearblue e332b8e26e Define _WIN32_WINNT first
Some toolchains may define different default values.
2025-10-25 21:04:03 +09:00
Yukihiro "Matz" Matsumoto bd3b5f87fb mruby-array-ext: revert unsafe length caching in ary_intersect_p; ref #6652
both hash and linear paths cache array lengths before loops that call
mrb_eql() and mrb_equal(), which can execute user code that modifies
arrays, causing out-of-bounds access.

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-25 08:45:39 +09:00
Yukihiro "Matz" Matsumoto 56a0bdf493 mruby-array-ext: revert unsafe hash path hoisting; ref #6652
khash operations (kh_get, kh_put) call mrb_eql() which can execute user
code that modifies arrays during iteration, invalidating cached pointers
and lengths. reverted hoisting in ary_subtract_internal, ary_union_internal,
ary_intersection_internal, and ary_uniq_bang hash paths.

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-25 08:45:39 +09:00