aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2013-02-21 16:22:26 +0100
committerMike Pall <mike>2013-02-21 16:22:26 +0100
commitd4bc6ab756371b744f3e0030d5cf0b24bffdf24c (patch)
tree1d1c523f72448a8655f8a641022043d7a6cdda82 /src
parente7633dba1e446763454a7969ce7e27139debc6cd (diff)
downloadluajit-d4bc6ab756371b744f3e0030d5cf0b24bffdf24c.tar.gz
luajit-d4bc6ab756371b744f3e0030d5cf0b24bffdf24c.tar.bz2
luajit-d4bc6ab756371b744f3e0030d5cf0b24bffdf24c.zip
Fix memory access check for fast string interning.
Diffstat (limited to 'src')
-rw-r--r--src/lj_str.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lj_str.c b/src/lj_str.c
index e63d8628..6548ee4d 100644
--- a/src/lj_str.c
+++ b/src/lj_str.c
@@ -48,7 +48,7 @@ static LJ_AINLINE int str_fastcmp(const char *a, const char *b, MSize len)
48{ 48{
49 MSize i = 0; 49 MSize i = 0;
50 lua_assert(len > 0); 50 lua_assert(len > 0);
51 lua_assert((((uintptr_t)a + len) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4); 51 lua_assert((((uintptr_t)a+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4);
52 do { /* Note: innocuous access up to end of string + 3. */ 52 do { /* Note: innocuous access up to end of string + 3. */
53 uint32_t v = lj_getu32(a+i) ^ *(const uint32_t *)(b+i); 53 uint32_t v = lj_getu32(a+i) ^ *(const uint32_t *)(b+i);
54 if (v) { 54 if (v) {
@@ -121,7 +121,7 @@ GCstr *lj_str_new(lua_State *L, const char *str, size_t lenx)
121 h ^= b; h -= lj_rol(b, 16); 121 h ^= b; h -= lj_rol(b, 16);
122 /* Check if the string has already been interned. */ 122 /* Check if the string has already been interned. */
123 o = gcref(g->strhash[h & g->strmask]); 123 o = gcref(g->strhash[h & g->strmask]);
124 if (LJ_LIKELY((((uintptr_t)str + len) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4)) { 124 if (LJ_LIKELY((((uintptr_t)str+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4)) {
125 while (o != NULL) { 125 while (o != NULL) {
126 GCstr *sx = gco2str(o); 126 GCstr *sx = gco2str(o);
127 if (sx->len == len && str_fastcmp(str, strdata(sx), len) == 0) { 127 if (sx->len == len && str_fastcmp(str, strdata(sx), len) == 0) {