void FUN_00405430(undefined4 *param_1,uint param_2,int param_3,uint param_4)
{
ushort uVar1;
undefined1 uVar2;
int iVar3;
ushort *puVar4;
char *pcVar5;
undefined **ppuVar6;
uint uVar7;
int iVar8;
uint uVar9;
uint uVar10;
param_4 = param_4 & 0xffff;
puVar4 = *(ushort **)(param_3 + 4);
param_1[1] = puVar4;
uVar9 = *(uint *)(param_3 + 8);
iVar8 = *(int *)(param_3 + 0xc);
uVar10 = uVar9 - iVar8;
ppuVar6 = (undefined **)(param_2 & 0xffff);
if (uVar10 < param_4 + 4) {
param_1 = (undefined4 *)FUN_0047082c(4);
ppuVar6 = &PTR_PTR_FUN_004af1e0;
pcVar5 = (char *)0x6007;
}
else {
uVar1 = *puVar4;
uVar2 = (undefined1)((uint)ppuVar6 >> 8);
if (ppuVar6 == (undefined **)((uVar1 & 0xff) << 8 | (uint)(uVar1 >> 8))) goto LAB_004054f8;
param_1 = (undefined4 *)FUN_0047082c(4);
pcVar5 = (char *)0x6008;
ppuVar6 = &PTR_PTR_FUN_004af1e0;
}
while( true ) {
while( true ) {
*param_1 = pcVar5;
param_3 = 0;
uVar2 = FUN_00472734();
LAB_004054f8:
*(char *)param_1 = (char)ppuVar6;
*(undefined1 *)((int)param_1 + 1) = uVar2;
iVar3 = param_1[1];
param_1[1] = iVar3 + 2;
uVar1 = *(ushort *)(iVar3 + 2);
uVar7 = (uVar1 & 0xff) << 8 | (uint)(uVar1 >> 8);
*(char *)((int)param_1 + 3) = (char)uVar1;
*(char *)((int)param_1 + 2) = (char)(uVar1 >> 8);
if (param_4 <= uVar7) break;
param_1 = (undefined4 *)FUN_0047082c(4);
ppuVar6 = &PTR_PTR_FUN_004af1e0;
pcVar5 = (char *)0x6004;
}
if (uVar7 + 4 <= uVar10) break;
param_1 = (undefined4 *)FUN_0047082c(4);
ppuVar6 = &PTR_PTR_FUN_004af2b0;
pcVar5 = "buffer overflow error";
}
param_1[1] = param_1[1] + 2;
iVar3 = *(ushort *)((int)param_1 + 2) + 4;
uVar10 = iVar3 + iVar8;
if (uVar10 <= uVar9) {
*(uint *)(param_3 + 0xc) = uVar10;
*(int *)(param_3 + 4) = *(int *)(param_3 + 4) + iVar3;
}
return;
}