mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-04-20 22:13:25 +00:00
fix stackover read
This commit is contained in:
parent
1c70983df1
commit
d87a18c473
@ -6,6 +6,7 @@
|
||||
# Debugged and (now seriously) modified by Ronan Collobert, for Torch7
|
||||
|
||||
#project(LuaJIT C ASM)
|
||||
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||
|
||||
SET(LUAJIT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
@ -427,3 +428,5 @@ MACRO(LUA_ADD_EXECUTABLE luajit_target)
|
||||
LUAJIT_add_custom_commands(${luajit_target} ${ARGN})
|
||||
add_executable(${luajit_target} ${target_srcs})
|
||||
ENDMACRO(LUA_ADD_EXECUTABLE luajit_target)
|
||||
|
||||
install(TARGETS luajit-5.1 RUNTIME DESTINATION .)
|
||||
|
@ -134,21 +134,34 @@ static const char *reader_string(lua_State *L, void *ud, size_t *size)
|
||||
return ctx->str;
|
||||
}
|
||||
|
||||
char* hack_gemcore(const char* base, size_t size)
|
||||
static const char *custom_strstr(const char *haystack, int haystack_length, const char *needle) {
|
||||
int needle_length = strlen(needle);
|
||||
|
||||
for (int i = 0; i <= haystack_length - needle_length; ++i) {
|
||||
if (memcmp(haystack + i, needle, needle_length) == 0) {
|
||||
return (char *)(haystack + i);
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char* hack_gemcore(const char* base, size_t size)
|
||||
{
|
||||
char* target;
|
||||
const char* t = base;
|
||||
char* s = NULL, *p = NULL, *q = NULL;
|
||||
if (strstr(base, "return _debug_getinfo") == NULL) return NULL;
|
||||
const char* s = NULL, *p = NULL;
|
||||
char *q = NULL;
|
||||
if (custom_strstr(base, size, "return _debug_getinfo") == NULL) return NULL;
|
||||
|
||||
target = (char*)malloc(size * 2 + 32);
|
||||
memset(target, 0, size * 2 + 32);
|
||||
q = target;
|
||||
|
||||
while (
|
||||
((p = strstr(t, "return _debug_")) != NULL) ||
|
||||
((p = strstr(t, "return _getfenv")) != NULL) ||
|
||||
((p = strstr(t, "return _setfenv")) != NULL)
|
||||
((p = custom_strstr(t, size, "return _debug_")) != NULL) ||
|
||||
((p = custom_strstr(t, size, "return _getfenv")) != NULL) ||
|
||||
((p = custom_strstr(t, size, "return _setfenv")) != NULL)
|
||||
) {
|
||||
memcpy(q, t, p - t);
|
||||
q += p - t;
|
||||
@ -159,7 +172,7 @@ char* hack_gemcore(const char* base, size_t size)
|
||||
continue;
|
||||
}
|
||||
|
||||
s = strstr(p, "end");
|
||||
s = custom_strstr(p, size - (p - base) - 1, "end");
|
||||
if (s != NULL) {
|
||||
memcpy(q, p, s - p); q += s - p;
|
||||
memcpy(q, ", nil end", 9); q += 9;
|
||||
|
Loading…
Reference in New Issue
Block a user