undefined4 * dhcp6_add_listval(int param_1,undefined4 param_2,undefined4 *param_3,int param_4)
{
undefined4 *__ptr;
int iVar1;
undefined4 *puVar2;
undefined4 uVar3;
undefined4 uVar4;
undefined4 uVar5;
undefined4 uVar6;
undefined4 uVar7;
undefined4 uVar8;
__ptr = (undefined4 *)malloc(0x30) //possible issue identified - semgrep
if (__ptr == (undefined4 *)0x0) {
dprintf(3,"dhcp6_add_listval","failed to allocate memory for list entry");
return (undefined4 *)0x0;
}
*__ptr = 0;
__ptr[1] = 0;
__ptr[3] = 0;
__ptr[4] = 0;
__ptr[5] = 0;
__ptr[6] = 0;
__ptr[7] = 0;
__ptr[8] = 0;
__ptr[9] = 0;
__ptr[2] = param_2;
__ptr[10] = 0;
__ptr[0xb] = __ptr + 10;
switch(param_2) {
default:
dprintf(3,"dhcp6_add_listval","unexpected list value type (%d)",param_2);
goto LAB_0040cb84;
case 1:
__ptr[3] = *param_3;
break;
case 2:
*(undefined2 *)(__ptr + 3) = *(undefined2 *)param_3;
break;
case 3:
uVar5 = param_3[3];
uVar3 = param_3[1];
uVar4 = param_3[2];
__ptr[3] = *param_3;
__ptr[4] = uVar3;
__ptr[5] = uVar4;
__ptr[6] = uVar5;
break;
case 4:
case 6:
uVar3 = param_3[2];
uVar4 = param_3[1];
__ptr[3] = *param_3;
__ptr[4] = uVar4;
__ptr[5] = uVar3;
break;
case 5:
uVar8 = param_3[6];
uVar3 = param_3[1];
uVar4 = param_3[2];
uVar5 = param_3[3];
uVar6 = param_3[4];
uVar7 = param_3[5];
__ptr[3] = *param_3;
__ptr[4] = uVar3;
__ptr[5] = uVar4;
__ptr[6] = uVar5;
__ptr[7] = uVar6;
__ptr[8] = uVar7;
__ptr[9] = uVar8;
break;
case 7:
uVar7 = param_3[5];
uVar3 = param_3[1];
uVar4 = param_3[2];
uVar5 = param_3[3];
uVar6 = param_3[4];
__ptr[3] = *param_3;
__ptr[4] = uVar3;
__ptr[5] = uVar4;
__ptr[6] = uVar5;
__ptr[7] = uVar6;
__ptr[8] = uVar7;
break;
case 8:
iVar1 = dhcp6_vbuf_copy(__ptr + 3,param_3);
if (iVar1 == 0) break;
goto LAB_0040cb84;
}
if ((param_4 == 0) || (iVar1 = dhcp6_copy_list(__ptr + 10,param_4), iVar1 == 0)) {
puVar2 = *(undefined4 **)(param_1 + 4);
*__ptr = 0;
__ptr[1] = puVar2;
*puVar2 = __ptr;
*(undefined4 **)(param_1 + 4) = __ptr;
}
else {
LAB_0040cb84:
free(__ptr);
__ptr = (undefined4 *)0x0;
}
return __ptr;
}