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