Skip to content
Permalink
Browse files

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.
  • Loading branch information...
mame committed Oct 9, 2019
1 parent b439ee1 commit d0e30fc955a3a91952c6d63c56d900b72d657a3a
Showing with 1 addition and 1 deletion.
  1. +1 −1 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;

0 comments on commit d0e30fc

Please sign in to comment.
You can’t perform that action at this time.