undefined4 FUN_00418b58(int param_1,char *param_2,int param_3)
{
byte bVar1;
byte bVar2;
byte bVar3;
byte bVar4;
char *pcVar5;
int iVar6;
int iVar7;
byte bVar8;
char *pcVar9;
int __c;
char *pcVar10;
byte local_48 [4];
int local_44;
byte local_40;
byte local_3f;
byte local_3e;
byte local_3d;
byte local_3c;
byte local_3b;
undefined1 local_3a;
char *local_38;
char *local_34;
int *local_30;
byte *local_2c;
if ((param_2 != (char *)0x0) && (pcVar9 = param_2 + param_3, 0 < param_3)) {
if (param_2 < pcVar9) {
local_38 = PTR_s_0123456789ABCDEFabcdef_004303f0;
local_34 = PTR_s_0123456789_004303f4;
local_30 = &local_44;
local_2c = local_48;
do {
iVar6 = (int)*param_2;
local_44 = 0;
if (iVar6 == 0x26) {
iVar6 = strncasecmp(param_2,""",6);
if (iVar6 == 0) {
local_44 = 6;
iVar6 = 0x22;
bVar8 = 0x22;
}
else {
iVar6 = strncasecmp(param_2,"<",4);
if (iVar6 == 0) {
local_44 = 4;
iVar6 = 0x3c;
bVar8 = 0x3c;
}
else {
iVar6 = strncasecmp(param_2,">",4);
if (iVar6 == 0) {
local_44 = 4;
iVar6 = 0x3e;
bVar8 = 0x3e;
}
else {
iVar6 = strncasecmp(param_2,"'",6);
if (iVar6 == 0) {
local_44 = 6;
iVar6 = 0x27;
bVar8 = 0x27;
}
else {
iVar6 = strncasecmp(param_2,"&",5);
if (iVar6 != 0) {
iVar6 = strncasecmp(param_2,"&#x",3);
pcVar10 = param_2 + 3;
if (iVar6 == 0) {
iVar6 = 0;
while( true ) {
__c = (int)*pcVar10;
pcVar5 = strchr(local_38,__c);
iVar7 = iVar6 * 0x10;
if (pcVar5 == (char *)0x0) break;
iVar6 = __c + -0x30 + iVar7;
if (0x39 < __c) {
if (__c < 0x47) {
iVar6 = __c + -0x37 + iVar7;
}
else {
iVar6 = __c + -0x57 + iVar7;
}
}
pcVar10 = pcVar10 + 1;
}
}
else {
iVar6 = strncasecmp(param_2,"&#",2);
if (iVar6 != 0) {
return 0x6a;
}
pcVar10 = param_2 + 2;
iVar6 = 0;
while( true ) {
__c = (int)*pcVar10;
pcVar5 = strchr(local_34,__c);
if (pcVar5 == (char *)0x0) break;
iVar6 = __c + -0x30 + iVar6 * 10;
pcVar10 = pcVar10 + 1;
}
}
if (param_2 == pcVar10) {
return 0x6a;
}
if (__c != 0x3b) {
return 0x6a;
}
if ((iVar6 - 9U < 2) || (iVar6 == 0xd)) {
LAB_00419148:
local_44 = (int)pcVar10 - (int)param_2 //possible issue identified - semgrep
}
else {
local_44 = (int)pcVar10 - (int)param_2 //possible issue identified - semgrep
if ((0xd7df < iVar6 - 0x20U) &&
(local_44 = (int)pcVar10 - (int)param_2, 0x1ffd < iVar6 - 0xe000U)) { //possible issue identified - semgrep
if (0xfffff < iVar6 - 0x10000U) {
return 0x6a;
}
goto LAB_00419148;
}
}
local_44 = local_44 + 1;
goto LAB_00418c2c;
}
local_44 = 5;
iVar6 = 0x26;
bVar8 = 0x26;
}
}
}
}
}
else {
if ((iVar6 < 1) || (((1 < iVar6 - 9U && (iVar6 != 0xd)) && (0xd7df < iVar6 - 0x20U)))) {
iVar6 = FUN_00417ef8(param_2,local_30);
if (1 < iVar6 - 9U) {
if (iVar6 == 0xd) {
bVar8 = 0xd;
goto LAB_00418c38;
}
if (((0xd7df < iVar6 - 0x20U) && (0x1ffd < iVar6 - 0xe000U)) &&
(0xfffff < iVar6 - 0x10000U)) {
return 0x6a;
}
}
}
else {
local_44 = 1;
}
LAB_00418c2c:
bVar8 = (byte)iVar6;
if (iVar6 < 1) {
return 0x6a;
}
}
LAB_00418c38:
if (local_44 == 1) {
param_2 = param_2 + 1;
local_48[0] = bVar8;
ixml_membuf_append(param_1 + 0x1c,local_2c);
}
else {
if (iVar6 < 0x80) {
local_3f = 0;
local_40 = bVar8;
}
else {
bVar1 = (byte)(iVar6 >> 6);
if (iVar6 < 0x800) {
local_3f = bVar8 & 0x3f | 0x80;
local_3e = 0;
local_40 = bVar1 | 0xc0;
}
else {
bVar2 = (byte)(iVar6 >> 0xc);
if (iVar6 < 0x10000) {
local_3e = bVar8 & 0x3f | 0x80;
local_3f = bVar1 & 0x3f | 0x80;
local_3d = 0;
local_40 = bVar2 | 0xe0;
}
else {
bVar3 = (byte)(iVar6 >> 0x12);
if (iVar6 < 0x200000) {
local_3d = bVar8 & 0x3f | 0x80;
local_3f = bVar2 & 0x3f | 0x80;
local_3e = bVar1 & 0x3f | 0x80;
local_3c = 0;
local_40 = bVar3 | 0xf0;
}
else {
bVar4 = (byte)((uint)iVar6 >> 0x18);
if (iVar6 < 0x4000000) {
local_3c = bVar8 & 0x3f | 0x80;
local_3f = bVar3 & 0x3f | 0x80;
local_3e = bVar2 & 0x3f | 0x80;
local_3d = bVar1 & 0x3f | 0x80;
local_3b = 0;
local_40 = bVar4 | 0xf8;
}
else {
local_3b = bVar8 & 0x3f | 0x80;
local_3f = bVar4 & 0x3f | 0x80;
local_3e = bVar3 & 0x3f | 0x80;
local_3d = bVar2 & 0x3f | 0x80;
local_3c = bVar1 & 0x3f | 0x80;
local_3a = 0;
local_40 = (char)bVar4 >> 6 | 0xfc;
}
}
}
}
}
ixml_membuf_append_str(param_1 + 0x1c,&local_40);
param_2 = param_2 + local_44;
}
if (pcVar9 <= param_2) goto LAB_00418d7c;
} while (param_2 != (char *)0x0);
}
else {
LAB_00418d7c:
if (param_2 <= pcVar9) {
return 0;
}
}
}
return 0x6a;
}