mirror of
https://github.com/redis/redis.git
synced 2026-05-28 04:02:46 -04:00
Pass context to RM_GetUserUsername() to support auto memory management (#15042)
Following #14890 ## Problem RM_GetUserUsername() documents that the returned RedisModuleString can be freed via automatic memory management, but it always creates the string with ctx=NULL so it cannot be tracked by RedisModule_AutoMemory. Modules following the documentation may leak memory. ## Fix Fixes `RedisModule_GetUserUsername` to accept a `RedisModuleCtx *` and create the returned `RedisModuleString` with that context, allowing RedisModule auto-memory management to track/free it as documented.
This commit is contained in:
parent
5a05863e97
commit
247307de96
3 changed files with 5 additions and 5 deletions
|
|
@ -10480,11 +10480,11 @@ int RM_FreeModuleUser(RedisModuleUser *user) {
|
|||
* Returns NULL if user is NULL or the user has no name.
|
||||
* The returned string must be freed by the caller with RedisModule_FreeString()
|
||||
* or by enabling automatic memory management on a context. */
|
||||
RedisModuleString *RM_GetUserUsername(const RedisModuleUser *user) {
|
||||
RedisModuleString *RM_GetUserUsername(RedisModuleCtx *ctx, const RedisModuleUser *user) {
|
||||
if(user == NULL || user->user == NULL || user->user->name == NULL)
|
||||
return NULL;
|
||||
|
||||
return RM_CreateString(NULL, user->user->name, sdslen(user->user->name));
|
||||
return RM_CreateString(ctx, user->user->name, sdslen(user->user->name));
|
||||
}
|
||||
|
||||
/* Sets the permissions of a user created through the redis module
|
||||
|
|
|
|||
|
|
@ -1426,7 +1426,7 @@ REDISMODULE_API RedisModuleUser * (*RedisModule_CreateModuleUser)(const char *na
|
|||
REDISMODULE_API void (*RedisModule_FreeModuleUser)(RedisModuleUser *user) REDISMODULE_ATTR;
|
||||
REDISMODULE_API void (*RedisModule_SetContextUser)(RedisModuleCtx *ctx, const RedisModuleUser *user) REDISMODULE_ATTR;
|
||||
REDISMODULE_API const RedisModuleUser *(*RedisModule_GetContextUser)(RedisModuleCtx *ctx) REDISMODULE_ATTR;
|
||||
REDISMODULE_API RedisModuleString *(*RedisModule_GetUserUsername)(const RedisModuleUser *user) REDISMODULE_ATTR;
|
||||
REDISMODULE_API RedisModuleString *(*RedisModule_GetUserUsername)(RedisModuleCtx *ctx, const RedisModuleUser *user) REDISMODULE_ATTR;
|
||||
REDISMODULE_API int (*RedisModule_SetModuleUserACL)(RedisModuleUser *user, const char* acl) REDISMODULE_ATTR;
|
||||
REDISMODULE_API int (*RedisModule_SetModuleUserACLString)(RedisModuleCtx * ctx, RedisModuleUser *user, const char* acl, RedisModuleString **error) REDISMODULE_ATTR;
|
||||
REDISMODULE_API RedisModuleString * (*RedisModule_GetModuleUserACLString)(RedisModuleUser *user) REDISMODULE_ATTR;
|
||||
|
|
|
|||
|
|
@ -119,13 +119,13 @@ int get_user_username(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
|
|||
RedisModule_ReplyWithSimpleString(ctx, "none");
|
||||
return REDISMODULE_OK;
|
||||
}
|
||||
RedisModuleString *name = RedisModule_GetUserUsername(user);
|
||||
RedisModuleString *name = RedisModule_GetUserUsername(ctx, user);
|
||||
if (name == NULL) {
|
||||
RedisModule_ReplyWithSimpleString(ctx, "none");
|
||||
return REDISMODULE_OK;
|
||||
}
|
||||
RedisModule_ReplyWithString(ctx, name);
|
||||
RedisModule_FreeString(NULL, name);
|
||||
RedisModule_FreeString(ctx, name);
|
||||
return REDISMODULE_OK;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue