diff options
| author | “pengxuanzheng” <[email protected]> | 2022-07-08 05:54:40 +0000 |
|---|---|---|
| committer | “pengxuanzheng” <[email protected]> | 2022-07-12 07:28:14 +0000 |
| commit | d232643ada60cb3c2ec495c0009460470c14ed8c (patch) | |
| tree | b6ba6b6693fd9f8bb1e962e412aaaa543569a945 /src | |
| parent | b19d688c161dacfd4a48a12970a5185c4c1b6437 (diff) | |
🐞 fix(TSG-11123): 修复c_pull_param_from_lua 段错误
Diffstat (limited to 'src')
| -rw-r--r-- | src/tsg_lua_func.cpp | 43 | ||||
| -rw-r--r-- | src/tsg_lua_interface.h | 2 |
2 files changed, 23 insertions, 22 deletions
diff --git a/src/tsg_lua_func.cpp b/src/tsg_lua_func.cpp index 20eb3f1..b19ec01 100644 --- a/src/tsg_lua_func.cpp +++ b/src/tsg_lua_func.cpp @@ -1440,7 +1440,7 @@ int c_pull_param_from_lua(tsg_lua_handle L, int *argc, struct lua_arg_t **argv) return 0; } - *argv = (struct lua_arg_t *)calloc(*argc, sizeof(struct lua_arg_t)); + struct lua_arg_t *value = (struct lua_arg_t *)calloc(*argc, sizeof(struct lua_arg_t)); // memset(argv, 0, argc * sizeof(struct lua_arg_t)); const char *str = NULL; @@ -1450,51 +1450,52 @@ int c_pull_param_from_lua(tsg_lua_handle L, int *argc, struct lua_arg_t **argv) switch (type) { case LUA_TBOOLEAN: - argv[i]->type = BOOLEAN; - argv[i]->flag = lua_toboolean(L, i - *argc); + value[i].type = BOOLEAN; + value[i].flag = lua_toboolean(L, i - *argc); break; case LUA_TNUMBER: - argv[i]->type = INTEGER; - argv[i]->num = lua_tonumber(L, i - *argc); + value[i].type = INTEGER; + value[i].num = lua_tonumber(L, i - *argc); break; case LUA_TSTRING: - argv[i]->type = STRING; + value[i].type = STRING; str = lua_tostring(L, i - *argc); - argv[i]->len = strlen(str); - argv[i]->str = (char *)malloc(argv[i]->len+1); - memcpy(argv[i]->str, str, argv[i]->len); - argv[i]->str[argv[i]->len] = '\0'; + value[i].len = strlen(str); + value[i].str = (char *)malloc(value[i].len+1); + memcpy(value[i].str, str, value[i].len); + value[i].str[value[i].len] = '\0'; break; default: + free_param_form_lua(*argc, value); + *argc = 0; + *argv = NULL; return ERR_LUA_FUNCTION_ARGV; } } + *argv = value; + return 0; } -int free_param_form_lua(int argc, lua_arg_t **argv) +int free_param_form_lua(int argc, lua_arg_t *argv) { - if (argc == 0 || *argv == NULL) + if (argc == 0 || argv == NULL) { return 0; } for(int i = 0; i < argc; i++) { - if (argv[i] == NULL) - { - continue; - } - if (argv[i]->type == STRING) + if (argv[i].type == STRING) { - free(argv[i]->str); - argv[i]->str = NULL; + free(argv[i].str); + argv[i].str = NULL; } } - free(*argv); - *argv = NULL; + free(argv); + //*argv = NULL; return 0; } diff --git a/src/tsg_lua_interface.h b/src/tsg_lua_interface.h index 3642012..4f73d25 100644 --- a/src/tsg_lua_interface.h +++ b/src/tsg_lua_interface.h @@ -166,7 +166,7 @@ int tsg_lua_cache_exec(tsg_lua_handle L, size_t script_id, const char *in, size_ int tsg_destory_lua(tsg_lua_handle L); int c_pull_param_from_lua(tsg_lua_handle lua, int *argc, lua_arg_t **argv); -int free_param_form_lua(int argc, lua_arg_t **argv); +int free_param_form_lua(int argc, lua_arg_t *argv); int c_push_num_into_lua(tsg_lua_handle lua, long num); int c_push_bool_into_lua(tsg_lua_handle lua, bool flag); int c_push_nil_into_lua(tsg_lua_handle lua); |
