Commit c8ee9c60 authored by Alex Brainman's avatar Alex Brainman

runtime: better checks for syscall.NewCallback parameter

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/4859042
parent d118905c
......@@ -347,16 +347,26 @@ static Callbacks cbs;
byte *
runtime·compilecallback(Eface fn, bool cleanstack)
{
Func *f;
int32 argsize, n;
FuncType *ft;
Type *t;
int32 argsize, i, n;
byte *p;
Callback *c;
if(fn.type->kind != KindFunc)
runtime·panicstring("not a function");
if((f = runtime·findfunc((uintptr)fn.data)) == nil)
runtime·throw("cannot find function");
argsize = (f->args-2) * 4;
if(fn.type == nil || fn.type->kind != KindFunc)
runtime·panicstring("compilecallback: not a function");
ft = (FuncType*)fn.type;
if(ft->out.len != 1)
runtime·panicstring("compilecallback: function must have one output parameter");
if(((Type**)ft->out.array)[0]->size != sizeof(uintptr))
runtime·panicstring("compilecallback: output parameter size is wrong");
argsize = 0;
for(i=0; i<ft->in.len; i++) {
t = ((Type**)ft->in.array)[i];
if(t->size != sizeof(uintptr))
runtime·panicstring("compilecallback: input parameter size is wrong");
argsize += t->size;
}
// compute size of new fn.
// must match code laid out below.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment