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