undefined4 FUN_00406dd4(int *param_1,uint *param_2,undefined1 *param_3,int param_4)

{
  uint uVar1;
  uint *puVar2;
  uint uVar3;
  
  puVar2 = (uint *)*param_1;
  if (3 < *param_2) {
    uVar3 = *param_2 - 4;
    uVar1 = *puVar2;
    uVar1 = uVar1 << 0x18 | uVar1 >> 0x18 | uVar1 >> 8 & 0xff00 | (uVar1 & 0xff00) << 8;
    *param_1 = (int)(puVar2 + 1);
    *param_2 = uVar3;
    if ((int)uVar1 <= (int)uVar3) {
      if (param_4 < (int)uVar1) {
        return 0xffffffff;
      }
      *param_3 = 0;
      param_3[1] = 0;
      param_3[2] = 0;
      param_3[3] = 0;
      memcpy(param_3,(void *)*param_1,uVar1)   //possible issue identified - semgrep
      if (param_3[param_4 + -1] == '\0') {
        *param_1 = (int)puVar2 + uVar1 + 4;
        *param_2 = uVar3 - uVar1;
        return 0;
      }
    }
  }
  return 0xffffffff;
}