fix(cid/352839): USE_AFTER_FREE in create_user_command #18669

This commit is contained in:
James McCoy 2022-05-22 13:29:15 -04:00 committed by GitHub
parent 7f6d2984a8
commit 47d9a393de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 1 deletions

View File

@ -1616,7 +1616,7 @@ void create_user_command(String name, Object command, Dict(user_command) *opts,
if (uc_add_command(name.data, name.size, rep, argt, def, flags, compl, compl_arg, compl_luaref,
addr_type_arg, luaref, force) != OK) {
api_set_error(err, kErrorTypeException, "Failed to create user command");
goto err;
// Do not goto err, since uc_add_command now owns luaref, compl_luaref, and compl_arg
}
return;

View File

@ -5528,6 +5528,11 @@ char *uc_validate_name(char *name)
return name;
}
/// Create a new user command {name}, if one doesn't already exist.
///
/// This function takes ownership of compl_arg, compl_luaref, and luaref.
///
/// @return OK if the command is created, FAIL otherwise.
int uc_add_command(char *name, size_t name_len, char *rep, uint32_t argt, long def, int flags,
int compl, char *compl_arg, LuaRef compl_luaref, cmd_addr_T addr_type,
LuaRef luaref, bool force)