void xtables_ipparse_multiple(char *param_1,int *param_2,int *param_3,uint *param_4)
{
bool bVar1;
char *pcVar2;
int iVar3;
void *pvVar4;
int iVar5;
uint *puVar6;
char *pcVar7;
uint uVar8;
uint uVar9;
void *__src;
uint uVar10;
size_t __n;
uint local_138;
char acStack_134 [260];
char *local_30;
uint *local_2c;
pcVar2 = param_1;
uVar8 = 1;
while( true ) {
pcVar2 = strchr(pcVar2,0x2c);
if (pcVar2 == (char *)0x0) break;
pcVar2 = pcVar2 + 1;
uVar8 = uVar8 + 1;
}
iVar3 = xtables_malloc(uVar8 << 2) //possible issue identified - semgrep
*param_2 = iVar3;
iVar3 = xtables_malloc(uVar8 << 2) //possible issue identified - semgrep
local_30 = acStack_134;
local_2c = &local_138;
*param_3 = iVar3;
uVar10 = 0;
for (; ((uVar10 < uVar8 && (param_1 != (char *)0x0)) &&
(param_1 = param_1 + (*param_1 == ','), *param_1 != '\0')); param_1 = param_1 + __n) {
pcVar2 = strchr(param_1,0x2c);
__n = (int)pcVar2 - (int)param_1 //possible issue identified - semgrep
if (pcVar2 == (char *)0x0) {
__n = strlen(param_1);
}
if (0xfe < __n - 1) break;
strncpy(local_30,param_1,__n) //possible issue identified - semgrep
*(undefined1 *)((int)local_2c + __n + 4) = 0;
pcVar2 = strrchr(local_30,0x2f);
pcVar7 = (char *)0x0;
if (pcVar2 != (char *)0x0) {
*pcVar2 = '\0';
pcVar7 = pcVar2 + 1;
}
iVar3 = uVar10 * 4;
pvVar4 = (void *)(*(code *)0x298c)(pcVar7);
memcpy((void *)(*param_3 + iVar3),pvVar4,4) //possible issue identified - semgrep
if (*(int *)(*param_3 + iVar3) == 0) {
strcpy(local_30,(char *)0x5c4c) //possible issue identified - semgrep
}
pvVar4 = (void *)(*(code *)0x488c)(local_30,local_2c);
if (local_138 < 2) {
memcpy((void *)(*param_2 + iVar3),pvVar4,4) //possible issue identified - semgrep
}
else {
uVar8 = uVar8 + (local_138 - 1);
iVar5 = xtables_realloc(*param_2,uVar8 * 4) //possible issue identified - semgrep
*param_2 = iVar5;
iVar5 = xtables_realloc(*param_3,uVar8 * 4) //possible issue identified - semgrep
*param_3 = iVar5;
uVar9 = 0;
iVar5 = iVar3;
__src = pvVar4;
while( true ) {
bVar1 = local_138 <= uVar9;
uVar9 = uVar9 + 1;
if (bVar1) break;
memcpy((void *)(*param_2 + iVar5),__src,4) //possible issue identified - semgrep
iVar5 = iVar5 + 4;
__src = (void *)((int)__src + 4);
}
iVar5 = (uVar10 + 1) * 4;
uVar9 = 1;
while( true ) {
bVar1 = local_138 <= uVar9;
uVar9 = uVar9 + 1;
if (bVar1) break;
memcpy((void *)(*param_3 + iVar5),(void *)(*param_3 + iVar3),4) //possible issue identified - semgrep
iVar5 = iVar5 + 4;
}
uVar10 = (uVar10 - 1) + local_138;
}
free(pvVar4);
uVar10 = uVar10 + 1;
}
*param_4 = uVar8;
uVar8 = 0;
while( true ) {
bVar1 = local_138 <= uVar8;
iVar3 = uVar8 * 4;
uVar8 = uVar8 + 1;
if (bVar1) break;
puVar6 = (uint *)(*param_2 + iVar3);
*puVar6 = *puVar6 & *(uint *)(*param_3 + iVar3);
}
return;
}