void * FUN_00402d4c(size_t param_1,void *param_2,size_t param_3,void *param_4)

{
  void *__dest;
  void *__s;
  
  if ((int)param_1 < 0) {   //possible issue identified - semgrep
    __s = (void *)0x0;
  }
  else {
    __s = (void *)0x0;
    if (param_2 != (void *)0x0) {
      __s = malloc(0x2c)   //possible issue identified - semgrep
      if (__s != (void *)0x0) {
        memset(__s,0,0x2c)   //possible issue identified - semgrep
        *(char *)((int)__s + 4) = (char)param_1;
        memcpy((void *)((int)__s + 5),param_2,param_1)   //possible issue identified - semgrep
        if ((0 < (int)param_3) && (param_4 != (void *)0x0)) {
          *(short *)((int)__s + 0x24) = (short)param_3;
          __dest = malloc(param_3)   //possible issue identified - semgrep
          *(void **)((int)__s + 0x28) = __dest;
          memcpy(__dest,param_4,param_3)   //possible issue identified - semgrep
        }
      }
    }
  }
  return __s;
}