merge revision(s) 7ae67e8f6ad6e7fd0677b28a7a10961f79d55495: [Backport #21568]

[PATCH] load.c: Fix dest and src of MEMMOVE

	When multiple files with the same name are required, the features_index
	hash stores the indexes in `$LOADED_FEATURES` array into a darray.
	The dest and src arguments for `MEMMOVE` were wrongly reversed when
	inserting a new index in the darray.

	[Bug #21568]
This commit is contained in:
nagachika 2025-10-11 17:01:06 +09:00
parent ce7aa23f97
commit 27a1df7506
3 changed files with 16 additions and 2 deletions

2
load.c
View File

@ -283,7 +283,7 @@ features_index_add_single_callback(st_data_t *key, st_data_t *value, st_data_t r
if (pos >= 0) {
long *ptr = rb_darray_data_ptr(feature_indexes);
long len = rb_darray_size(feature_indexes);
MEMMOVE(ptr + pos, ptr + pos + 1, long, len - pos - 1);
MEMMOVE(ptr + pos + 1, ptr + pos, long, len - pos - 1);
ptr[pos] = FIX2LONG(offset);
}
}

View File

@ -1035,4 +1035,18 @@ class TestRequire < Test::Unit::TestCase
end
RUBY
end
def test_bug_21568
load_path = $LOAD_PATH.dup
loaded_featrures = $LOADED_FEATURES.dup
$LOAD_PATH.clear
$LOADED_FEATURES.replace(["foo.so", "a/foo.rb", "b/foo.rb"])
assert_nothing_raised(LoadError) { require "foo" }
ensure
$LOAD_PATH.replace(load_path) if load_path
$LOADED_FEATURES.replace loaded_featrures
end
end

View File

@ -11,7 +11,7 @@
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
#define RUBY_VERSION_TEENY 9
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
#define RUBY_PATCHLEVEL 178
#define RUBY_PATCHLEVEL 179
#include "ruby/version.h"
#include "ruby/internal/abi.h"