/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined4 FUN_0040e430(int param_1,byte *param_2,undefined4 param_3,undefined4 param_4)

{
  undefined4 uVar1;
  uint uVar2;
  size_t sVar3;
  byte *pbVar4;
  int iVar5;
  uint uVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *local_240;
  int local_23c;
  char *local_238;
  char local_234 [256];
  char acStack_134 [260];
  byte **local_30;
  int *local_2c;
  
  local_2c = &local_23c;
  local_30 = &local_240;
  pbVar8 = param_2 + param_1;
  local_240 = param_2;
  while( true ) {
    if (pbVar8 <= local_240) {
      return 0;
    }
    local_234[0] = '\0';
    pbVar7 = *local_30;
    if (pbVar8 <= *local_30) break;
    do {
      uVar6 = (uint)*pbVar7;
      if ((uVar6 == 0) || (pbVar7 != *local_30)) {
        uVar2 = strlcat(local_234,".",0x100)   //possible issue identified - semgrep
        if (0xff < uVar2) goto LAB_0040e4d0;
        pbVar4 = pbVar7;
        if (uVar6 == 0) goto LAB_0040e6a8;
      }
      pbVar4 = pbVar7 + 1;
      if ((0x3f < uVar6) || ((int)pbVar8 - (int)pbVar4 < (int)uVar6)) goto LAB_0040e4d0;
      iVar5 = uVar6 - 1;
      if (uVar6 != 0) {
        if (pbVar8 <= pbVar4) break;
        if ((*(ushort *)(___ctype_b + (uint)*pbVar4 * 2) & 0x40) == 0) goto LAB_0040e4d0;
        while( true ) {
          uVar2 = snprintf(acStack_134,0x100,"%c")   //possible issue identified - semgrep
          pbVar4 = pbVar4 + 1;
          if (0xff < uVar2) goto LAB_0040e4d0;
          uVar2 = strlcat(local_234,acStack_134,0x100)   //possible issue identified - semgrep
          if (0xff < uVar2) goto LAB_0040e4d0;
          iVar5 = iVar5 + -1;
          if ((int)(pbVar7 + ((uVar6 + 1) - (int)pbVar4)) < 1) break;
          if (pbVar8 <= pbVar4) goto LAB_0040e694;
          if ((*(ushort *)(___ctype_b + (uint)*pbVar4 * 2) & 0x40) == 0) goto LAB_0040e4d0;
        }
      }
      pbVar7 = pbVar4;
    } while (pbVar4 < pbVar8);
LAB_0040e694:
    if (iVar5 != 0) break;
LAB_0040e6a8:
    *local_30 = pbVar4 + 1;
    sVar3 = strlen(local_234);
    local_23c = sVar3 + 1   //possible issue identified - semgrep
    local_238 = local_234;
    iVar5 = dhcp6_add_listval(param_4,8,local_2c,0);
    if (iVar5 == 0) {
      uVar1 = dhcp6optstr(param_3);
      dprintf(3,"dhcp6_get_domain","failed to copy a %s domain name",uVar1);
      return 0xffffffff;
    }
  }
LAB_0040e4d0:
  uVar1 = dhcp6optstr(param_3);
  dprintf(6,"dhcp6_get_domain","failed to decode a %s domain name",uVar1);
  dprintf(6,"dhcp6_get_domain","malformed DHCP option: type %d, len %d",param_3,param_1);
  return 0xffffffff;
}