From 961b04c5b035861a5ab18c85aced4a9fb779a0ae Mon Sep 17 00:00:00 2001 From: alon Date: Tue, 14 Jan 2025 09:57:15 +0200 Subject: [PATCH 1/3] Avoid calling decode args if there are no args given when loading module --- src/macros.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/macros.rs b/src/macros.rs index eacb50b4..0c09170e 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -155,7 +155,11 @@ macro_rules! redis_module { ) } == raw::Status::Err as c_int { return raw::Status::Err as c_int; } let context = $crate::Context::new(ctx); - let args = $crate::decode_args(ctx, argv, argc); + let args = if argc == 0 { + Vec::new() + } else { + $crate::decode_args(ctx, argv, argc) + }; $( if $init_func(&context, &args) == $crate::Status::Err { From e4bea8985c5ad1ee972a7dfc0982b4fe9943c330 Mon Sep 17 00:00:00 2001 From: "Meir Shpilraien (Spielrein)" Date: Sun, 22 Oct 2023 15:37:21 +0300 Subject: [PATCH 2/3] Avoid passing NULL into from_raw_parts in case there are zero arguments on module load. (#371) (cherry picked from commit 0bb8c124cae1b42aa6c242c9bc30ca24fa4f1972) --- src/redismodule.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/redismodule.rs b/src/redismodule.rs index b035e4da..43a918d3 100644 --- a/src/redismodule.rs +++ b/src/redismodule.rs @@ -80,6 +80,9 @@ pub fn decode_args( argv: *mut *mut raw::RedisModuleString, argc: c_int, ) -> Vec { + if argv.is_null() { + return Vec::new(); + } unsafe { slice::from_raw_parts(argv, argc as usize) } .iter() .map(|&arg| RedisString::new(ctx, arg)) From 27e620d3ce09bd8440cc76437fea63302469f919 Mon Sep 17 00:00:00 2001 From: alon Date: Tue, 14 Jan 2025 11:34:29 +0200 Subject: [PATCH 3/3] revert old fix, align with master --- src/macros.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index 0c09170e..eacb50b4 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -155,11 +155,7 @@ macro_rules! redis_module { ) } == raw::Status::Err as c_int { return raw::Status::Err as c_int; } let context = $crate::Context::new(ctx); - let args = if argc == 0 { - Vec::new() - } else { - $crate::decode_args(ctx, argv, argc) - }; + let args = $crate::decode_args(ctx, argv, argc); $( if $init_func(&context, &args) == $crate::Status::Err {