summaryrefslogtreecommitdiff
path: root/vm_eval.c
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2019-10-09 14:03:04 +0900
committerYusuke Endoh <mame@ruby-lang.org>2019-10-09 14:03:04 +0900
commitd0e30fc955a3a91952c6d63c56d900b72d657a3a (patch)
tree3a0712eae3c18fdd64a090567de922f0d5e5f611 /vm_eval.c
parentb439ee1b8fa8d8a99f3f519af946ead94917edb2 (diff)
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.
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c2
1 files changed, 1 insertions, 1 deletions
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;