зеркало из https://github.com/github/ruby.git
glibc says memcpy cannot take NULL
At least since 2004, glibc's <string.h> annotates memcpy as __attribute__((__nonnull__)). On the other hand the argv here, which is passed from rb_funcallv, may be NULL. Practically this should never be a serious problem but for maximum safety, let's avoid passing NULL here.
This commit is contained in:
Родитель
a116f04cca
Коммит
e7b18ca6d9
14
vm_eval.c
14
vm_eval.c
|
@ -383,6 +383,13 @@ check_funcall_missing(rb_execution_context_t *ec, VALUE klass, VALUE recv, ID mi
|
|||
VALUE argbuf, *new_args = ALLOCV_N(VALUE, argbuf, argc+1);
|
||||
|
||||
new_args[0] = ID2SYM(mid);
|
||||
#ifdef __GLIBC__
|
||||
if (!argv) {
|
||||
static const VALUE buf = Qfalse;
|
||||
VM_ASSERT(argc == 0);
|
||||
argv = &buf;
|
||||
}
|
||||
#endif
|
||||
MEMCPY(new_args+1, argv, VALUE, argc);
|
||||
ec->method_missing_reason = MISSING_NOENTRY;
|
||||
args.ec = ec;
|
||||
|
@ -734,6 +741,13 @@ method_missing(VALUE obj, ID id, int argc, const VALUE *argv, enum method_missin
|
|||
|
||||
nargv = ALLOCV_N(VALUE, work, argc + 1);
|
||||
nargv[0] = ID2SYM(id);
|
||||
#ifdef __GLIBC__
|
||||
if (!argv) {
|
||||
static const VALUE buf = Qfalse;
|
||||
VM_ASSERT(argc == 0);
|
||||
argv = &buf;
|
||||
}
|
||||
#endif
|
||||
MEMCPY(nargv + 1, argv, VALUE, argc);
|
||||
++argc;
|
||||
argv = nargv;
|
||||
|
|
Загрузка…
Ссылка в новой задаче