diff --git a/src/luau/require.rs b/src/luau/require.rs index e261bf7..7e232f7 100644 --- a/src/luau/require.rs +++ b/src/luau/require.rs @@ -570,8 +570,14 @@ pub(super) fn create_require_function( unsafe extern "C-unwind" fn to_lowercase(state: *mut ffi::lua_State) -> c_int { let s = ffi::luaL_checkstring(state, 1); let s = CStr::from_ptr(s); + if !s.to_bytes().iter().any(|&c| c.is_ascii_uppercase()) { + // If the string does not contain any uppercase ASCII letters, return it as is + return 1; + } callback_error_ext(state, ptr::null_mut(), true, |extra, _| { - let s = s.to_string_lossy().to_lowercase(); + let s = (s.to_bytes().iter()) + .map(|&c| c.to_ascii_lowercase()) + .collect::(); (*extra).raw_lua().push(s).map(|_| 1) }) } diff --git a/src/state.rs b/src/state.rs index 065532e..ea3bc8e 100644 --- a/src/state.rs +++ b/src/state.rs @@ -359,7 +359,7 @@ impl Lua { return Err(Error::runtime("module name must begin with '@'")); } #[cfg(feature = "luau")] - let modname = modname.to_lowercase(); + let modname = modname.to_ascii_lowercase(); unsafe { self.exec_raw::<()>(value, |state| { ffi::luaL_getsubtable(state, ffi::LUA_REGISTRYINDEX, LOADED_MODULES_KEY);