/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 FUN_00403270(void *param_1,void *param_2,int param_3)
{
int iVar1;
int *piVar2;
int *piVar3;
uint uVar4;
undefined4 uVar5;
uint uVar6;
byte *pbVar7;
uVar5 = 0xffffffff;
if (*(char *)((int)param_2 + 0x22) == '\x02') {
memcpy(param_1,param_2,0x24) //possible issue identified - semgrep
pbVar7 = (byte *)((int)param_2 + 0x24);
for (param_3 = param_3 + -0x24; uVar5 = 0, 0 < param_3; param_3 = param_3 - uVar6) {
uVar4 = (uint)*pbVar7;
uVar6 = (*(ushort *)(pbVar7 + uVar4 + 1) & 0xff) << 8 |
(uint)(*(ushort *)(pbVar7 + uVar4 + 1) >> 8);
if ((param_3 < (int)uVar6) || (uVar6 <= uVar4 + 2)) {
fputs("Length error while parsing neap packet!\n",_stderr);
return 0xffffffff;
}
iVar1 = FUN_00402d4c(uVar4,pbVar7 + 1,uVar6 + (-3 - uVar4) & 0xffff,pbVar7 + uVar4 + 3);
if ((param_1 != (void *)0x0) && (iVar1 != 0)) {
piVar3 = *(int **)((int)param_1 + 0x24);
if (*(int **)((int)param_1 + 0x24) == (int *)0x0) {
*(int *)((int)param_1 + 0x24) = iVar1;
}
else {
do {
piVar2 = piVar3;
piVar3 = (int *)*piVar2;
} while (piVar3 != (int *)0x0);
*piVar2 = iVar1;
}
}
pbVar7 = pbVar7 + uVar6;
}
}
return uVar5;
}