/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
ssize_t FUN_00402f38(int *param_1,void *param_2,int param_3)
{
FILE *__stream;
uint uVar1;
ssize_t sVar2;
int *piVar3;
char *pcVar4;
undefined4 *puVar5;
int iVar6;
uint __n;
int iVar7;
sockaddr local_fe0;
undefined1 auStack_fd0 [16];
undefined1 uStack_fc0;
ushort uStack_fbf;
undefined1 auStack_fbd [3];
ushort local_fba;
byte local_fb6;
undefined1 auStack_fb4 [3992];
local_fe0.sa_data._0_2_ = *(ushort *)(param_1 + 1) << 8 | *(ushort *)(param_1 + 1) >> 8;
local_fe0.sa_family = 2;
local_fe0.sa_data[2] = -1;
local_fe0.sa_data[3] = -1;
local_fe0.sa_data[4] = -1;
local_fe0.sa_data[5] = -1;
local_fe0.sa_data[6] = '\0';
local_fe0.sa_data[7] = '\0';
local_fe0.sa_data[8] = '\0';
local_fe0.sa_data[9] = '\0';
local_fe0.sa_data[10] = '\0';
local_fe0.sa_data[0xb] = '\0';
local_fe0.sa_data[0xc] = '\0';
local_fe0.sa_data[0xd] = '\0';
memcpy(&uStack_fc0,param_2,0x24) //possible issue identified - semgrep
puVar5 = *(undefined4 **)((int)param_2 + 0x24);
__n = 0x24;
while( true ) {
if (puVar5 == (undefined4 *)0x0) break;
memcpy(&uStack_fc0 + __n,puVar5 + 1,*(byte *)(puVar5 + 1) + 1) //possible issue identified - semgrep
uVar1 = *(ushort *)(puVar5 + 9) + 3 + (uint)*(byte *)(puVar5 + 1) & 0xffff;
iVar6 = *(byte *)(puVar5 + 1) + 1 + __n;
*(ushort *)(&uStack_fc0 + iVar6) = (ushort)(uVar1 << 8) | (ushort)(uVar1 >> 8);
__n = iVar6 + 2;
if (*(ushort *)(puVar5 + 9) != 0) {
if ((void *)puVar5[10] != (void *)0x0) {
memcpy(&uStack_fc0 + __n,(void *)puVar5[10],(uint)*(ushort *)(puVar5 + 9)) //possible issue identified - semgrep
__n = __n + *(ushort *)(puVar5 + 9);
}
}
puVar5 = (undefined4 *)*puVar5;
}
local_fba = (ushort)((__n & 0xffff) << 8) | (ushort)((__n & 0xffff) >> 8);
local_fb6 = local_fb6 & 0xf;
memset(auStack_fb4,0,0x10) //possible issue identified - semgrep
if ((param_3 != 0) && (*(char *)((int)param_1 + 0x17) == '\x01')) {
local_fb6 = local_fb6 & 0x8f | 0x10;
hmac_md5(&uStack_fc0,__n,param_1[6],param_1[7],auStack_fd0);
memcpy(auStack_fb4,auStack_fd0,0x10) //possible issue identified - semgrep
}
sVar2 = sendto(*param_1,&uStack_fc0,__n,0,&local_fe0,0x10);
__stream = _stderr;
if (sVar2 < 0) {
iVar7 = *param_1;
piVar3 = __errno_location();
iVar6 = *piVar3;
pcVar4 = strerror(iVar6);
fprintf(__stream,"%d sento error %d %s\n",iVar7,iVar6,pcVar4);
}
return sVar2;
}