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;
}