From d0e30fc955a3a91952c6d63c56d900b72d657a3a Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Wed, 9 Oct 2019 14:03:04 +0900 Subject: [PATCH] vm_eval.c (rb_adjust_argv_kw_splat): avoid memcpy with zero length A method call is often with `argc = 1` and `argv = &v` where v is a VALUE, and some functions shift the arguments by `argc-1` and `argv+1` (for example, rb_sym_proc_call). I'm unsure whether it is safe or not to pass a pointer `argv+1` to memcpy with zero length, but Coverity Scan complains it. So this attempts to suppress the warning by explicit check of the length. --- vm_eval.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm_eval.c b/vm_eval.c index 07af3b4b58..797338a659 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -244,7 +244,7 @@ rb_adjust_argv_kw_splat(int *argc, const VALUE **argv, int *kw_splat) int n = *argc; VALUE v; VALUE *ptr = rb_alloc_tmp_buffer2(&v, n+1, sizeof(VALUE)); - memcpy(ptr, *argv, sizeof(VALUE)*n); + if (n) memcpy(ptr, *argv, sizeof(VALUE)*n); ptr[n] = rb_hash_new(); *argc = ++n; *argv = ptr;