int * FUN_0040c744(int param_1,int param_2,char *param_3,undefined4 param_4)
{
int *__ptr;
char *pcVar1;
int iVar2;
undefined4 *puVar3;
__ptr = (int *)malloc(0x10) //possible issue identified - semgrep
if (__ptr != (int *)0x0) {
__ptr[2] = 0;
__ptr[3] = 0;
__ptr[1] = (int)__ptr;
*__ptr = (int)__ptr;
pcVar1 = strdup(param_3) //possible issue identified - semgrep
__ptr[2] = (int)pcVar1;
iVar2 = sobj_new();
__ptr[3] = iVar2;
if (iVar2 == 0) {
free((void *)__ptr[2]);
free(__ptr);
__ptr = (int *)0x0;
}
else {
sobj_add_string(iVar2,param_4);
if (param_2 == 0) {
param_2 = param_1 + 0x18;
}
puVar3 = *(undefined4 **)(param_2 + 4);
*__ptr = param_2;
*(int **)(param_2 + 4) = __ptr;
*puVar3 = __ptr;
__ptr[1] = (int)puVar3;
}
}
return __ptr;
}