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