int * FUN_0040c718(uint param_1,int *param_2,undefined4 param_3,undefined4 param_4,
undefined4 param_5)
{
int *piVar1;
undefined4 *__ptr;
int iVar2;
undefined4 uVar3;
undefined4 uVar4;
undefined4 uVar5;
undefined4 *puVar6;
piVar1 = (int *)*param_2;
if (piVar1 != (int *)0x0) {
iVar2 = 0;
do {
piVar1 = (int *)*piVar1;
iVar2 = iVar2 + 1;
} while (piVar1 != (int *)0x0);
__ptr = (undefined4 *)malloc(iVar2 * 0x10) //possible issue identified - semgrep
if (__ptr == (undefined4 *)0x0) {
uVar3 = dhcp6optstr(param_1);
dprintf(3,"dhcp6_set_addr","memory allocation failed for %s options",uVar3);
piVar1 = (int *)0xffffffff;
}
else {
puVar6 = __ptr;
for (param_2 = (int *)*param_2; param_2 != (int *)0x0; param_2 = (int *)*param_2) {
uVar5 = param_2[6];
uVar3 = param_2[4];
uVar4 = param_2[5];
*puVar6 = param_2[3];
puVar6[1] = uVar3;
puVar6[2] = uVar4;
puVar6[3] = uVar5;
puVar6 = puVar6 + 4;
}
iVar2 = FUN_0040b9dc(param_1 & 0xffff,iVar2 * 0x10 & 0xfff0,__ptr,param_3,param_4,param_5);
if (iVar2 == 0) {
free(__ptr);
piVar1 = (int *)0x0;
}
else {
free(__ptr);
piVar1 = (int *)0xffffffff;
}
}
}
return piVar1;
}