mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 15:14:08 +00:00
Fix memory access check for fast string interning.
This commit is contained in:
parent
e7633dba1e
commit
d4bc6ab756
@ -48,7 +48,7 @@ static LJ_AINLINE int str_fastcmp(const char *a, const char *b, MSize len)
|
|||||||
{
|
{
|
||||||
MSize i = 0;
|
MSize i = 0;
|
||||||
lua_assert(len > 0);
|
lua_assert(len > 0);
|
||||||
lua_assert((((uintptr_t)a + len) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4);
|
lua_assert((((uintptr_t)a+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4);
|
||||||
do { /* Note: innocuous access up to end of string + 3. */
|
do { /* Note: innocuous access up to end of string + 3. */
|
||||||
uint32_t v = lj_getu32(a+i) ^ *(const uint32_t *)(b+i);
|
uint32_t v = lj_getu32(a+i) ^ *(const uint32_t *)(b+i);
|
||||||
if (v) {
|
if (v) {
|
||||||
@ -121,7 +121,7 @@ GCstr *lj_str_new(lua_State *L, const char *str, size_t lenx)
|
|||||||
h ^= b; h -= lj_rol(b, 16);
|
h ^= b; h -= lj_rol(b, 16);
|
||||||
/* Check if the string has already been interned. */
|
/* Check if the string has already been interned. */
|
||||||
o = gcref(g->strhash[h & g->strmask]);
|
o = gcref(g->strhash[h & g->strmask]);
|
||||||
if (LJ_LIKELY((((uintptr_t)str + len) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4)) {
|
if (LJ_LIKELY((((uintptr_t)str+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4)) {
|
||||||
while (o != NULL) {
|
while (o != NULL) {
|
||||||
GCstr *sx = gco2str(o);
|
GCstr *sx = gco2str(o);
|
||||||
if (sx->len == len && str_fastcmp(str, strdata(sx), len) == 0) {
|
if (sx->len == len && str_fastcmp(str, strdata(sx), len) == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user