libco icon indicating copy to clipboard operation
libco copied to clipboard

局部变量at未初始化,是否会导致crash?

Open luoyue625 opened this issue 6 years ago • 1 comments

struct stCoRoutine_t co_create_env( stCoRoutineEnv_t * env, const stCoRoutineAttr_t attr, pfn_co_routine_t pfn,void *arg ) { stCoRoutineAttr_t at; if( attr ) { memcpy( &at,attr,sizeof(at) ); } if( at.stack_size <= 0 ) { at.stack_size = 128 * 1024; } else if( at.stack_size > 1024 * 1024 * 8 ) { at.stack_size = 1024 * 1024 * 8; }

if( at.stack_size & 0xFFF ) 
{
    at.stack_size &= ~0xFFF;
    at.stack_size += 0x1000;
}

stCoRoutine_t *lp = (stCoRoutine_t*)malloc( sizeof(stCoRoutine_t) );

memset( lp,0,(long)(sizeof(stCoRoutine_t))); 


lp->env = env;
lp->pfn = pfn;
lp->arg = arg;

stStackMem_t* stack_mem = NULL;
if( at.share_stack )
{
    stack_mem = co_get_stackmem( at.share_stack);
    at.stack_size = at.share_stack->stack_size;
}
else
{
    stack_mem = co_alloc_stackmem(at.stack_size);
}
lp->stack_mem = stack_mem;

lp->ctx.ss_sp = stack_mem->stack_buffer;
lp->ctx.ss_size = at.stack_size;

lp->cStart = 0;
lp->cEnd = 0;
lp->cIsMain = 0;
lp->cEnableSysHook = 0;
lp->cIsShareStack = at.share_stack != NULL;

lp->save_size = 0;
lp->save_buffer = NULL;
return lp;

} 局部变量 stCoRoutineAttr_t at;未初始化, 依赖于外部调用者的赋值,如果函数参数attr=NULL; if( at.share_stack )这种使用就是个野指针,可能导致程序crash

luoyue625 avatar Apr 17 '19 07:04 luoyue625

stCoRoutineAttr_t 有构造函数的

stCoRoutineAttr_t()
{
  stack_size = 128 * 1024;
  share_stack = NULL;
}

nrailg avatar Jul 11 '20 06:07 nrailg