server-re/decomp/MessageServer_Release_x64/full/functions/0x14000b500.c

116 lines
4 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14000b500 FUN_14000b500
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_14000b500(undefined8 *param_1,longlong *param_2)
{
ulonglong uVar1;
char cVar2;
byte bVar3;
longlong *plVar4;
undefined *_Src;
int *piVar5;
int iVar6;
longlong lVar7;
size_t _Size;
undefined8 uVar8;
ulonglong uVar9;
ulonglong uVar10;
char *pcVar11;
undefined1 auStack_78 [32];
char local_58 [32];
ulonglong local_38;
local_38 = DAT_1401ac5a0 ^ (ulonglong)auStack_78;
piVar5 = (int *)*param_1;
iVar6 = 0;
uVar8 = *(undefined8 *)piVar5;
if (0 < (int)uVar8) {
do {
_Src = PTR_s__amp__1401b33f0;
lVar7 = (longlong)iVar6;
bVar3 = *(byte *)((longlong)piVar5 + lVar7 + 0x10);
if (bVar3 == 0x26) {
if ((((int)uVar8 + -2 <= iVar6) ||
(*(char *)((longlong)(iVar6 + 1) + 0x10 + (longlong)piVar5) != '#')) ||
(*(char *)((longlong)(iVar6 + 2) + 0x10 + (longlong)piVar5) != 'x')) {
plVar4 = (longlong *)*param_2;
uVar9 = (ulonglong)DAT_1401b33f8;
uVar10 = *plVar4 + uVar9;
if (((ulonglong)plVar4[1] < uVar10) &&
(uVar1 = plVar4[1] + uVar10, (ulonglong)plVar4[1] < uVar1)) {
FUN_14000ae90(param_2,uVar1);
}
memmove((void *)(*(longlong *)*param_2 + 0x10 + *param_2),_Src,uVar9);
*(ulonglong *)*param_2 = uVar10;
*(undefined1 *)(*param_2 + 0x10 + uVar10) = 0;
goto LAB_14000b768;
}
if (iVar6 < (int)uVar8 + -1) {
do {
plVar4 = (longlong *)*param_2;
uVar9 = *plVar4 + 1;
if (((ulonglong)plVar4[1] < uVar9) &&
(uVar10 = plVar4[1] + uVar9, (ulonglong)plVar4[1] < uVar10)) {
FUN_14000ae90(param_2,uVar10);
}
memmove((void *)(*(longlong *)*param_2 + 0x10 + *param_2),
(void *)((longlong)iVar6 + 0x10 + (longlong)piVar5),1);
*(ulonglong *)*param_2 = uVar9;
iVar6 = iVar6 + 1;
*(undefined1 *)(*param_2 + 0x10 + uVar9) = 0;
piVar5 = (int *)*param_1;
} while ((*(char *)((longlong)piVar5 + lVar7 + 0x11) != ';') &&
(lVar7 = lVar7 + 1, iVar6 < *piVar5 + -1));
}
}
else {
if (bVar3 == 0x3c) {
FUN_14000b060(param_2,PTR_DAT_1401b3400,(ulonglong)DAT_1401b3408);
}
else if (bVar3 == 0x3e) {
FUN_14000b060(param_2,PTR_DAT_1401b3410,(ulonglong)DAT_1401b3418);
}
else if (bVar3 == 0x22) {
FUN_14000b060(param_2,PTR_s__quot__1401b3420,(ulonglong)DAT_1401b3428);
}
else if (bVar3 == 0x27) {
FUN_14000b060(param_2,PTR_s__apos__1401b3430,(ulonglong)DAT_1401b3438);
}
else if (bVar3 < 0x20) {
FUN_14000ae60(local_58,0x20,"&#x%02X;",(ulonglong)bVar3);
lVar7 = -1;
pcVar11 = local_58;
do {
if (lVar7 == 0) break;
lVar7 = lVar7 + -1;
cVar2 = *pcVar11;
pcVar11 = pcVar11 + 1;
} while (cVar2 != '\0');
_Size = (size_t)(int)(~(uint)lVar7 - 1);
plVar4 = (longlong *)*param_2;
uVar9 = *plVar4 + _Size;
if (((ulonglong)plVar4[1] < uVar9) &&
(uVar10 = plVar4[1] + uVar9, (ulonglong)plVar4[1] < uVar10)) {
FUN_14000ae90(param_2,uVar10);
}
memmove((void *)(*(longlong *)*param_2 + 0x10 + *param_2),local_58,_Size);
*(ulonglong *)*param_2 = uVar9;
*(undefined1 *)(*param_2 + 0x10 + uVar9) = 0;
}
else {
FUN_14000b0e0(param_2,bVar3);
}
LAB_14000b768:
iVar6 = iVar6 + 1;
}
piVar5 = (int *)*param_1;
uVar8 = *(undefined8 *)piVar5;
} while (iVar6 < (int)uVar8);
}
return;
}