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

168 lines
4.1 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14010dbc0 FUN_14010dbc0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
undefined4 FUN_14010dbc0(longlong param_1,uint *param_2,uint *param_3)
{
byte bVar1;
int iVar2;
undefined8 uVar3;
undefined1 *puVar4;
uint uVar5;
uint uVar6;
undefined1 auStack_88 [32];
undefined1 local_68 [4];
undefined1 local_64;
undefined1 local_63;
undefined1 local_62;
undefined1 local_61;
undefined1 local_60;
undefined1 local_5f;
char local_5e;
undefined1 local_5d;
char local_5c;
undefined1 local_5b;
undefined1 local_5a;
undefined1 local_59;
undefined1 local_58;
ulonglong local_48;
local_48 = DAT_1401ac5a0 ^ (ulonglong)auStack_88;
if (((param_1 == 0) || (param_2 == (uint *)0x0)) || (param_3 == (uint *)0x0)) {
return 0x10;
}
if (*param_2 < 2) {
return 7;
}
bVar1 = *(byte *)(param_1 + 1);
if (0x1f < bVar1) {
return 7;
}
if (*param_2 < bVar1 + 2) {
return 7;
}
uVar5 = 0;
uVar6 = uVar5;
if (bVar1 != 0) {
puVar4 = local_68;
uVar6 = 0;
do {
iVar2 = FUN_14010e3d0((uint)(byte)puVar4[(param_1 - (longlong)local_68) + 2]);
if (iVar2 == -1) {
return 7;
}
*puVar4 = (char)iVar2;
uVar6 = uVar6 + 1;
puVar4 = puVar4 + 1;
} while (uVar6 < *(byte *)(param_1 + 1));
}
*param_2 = uVar6 + 2;
uVar3 = FUN_14010db30(local_68[0]);
iVar2 = (int)uVar3 * 5;
uVar3 = FUN_14010db30(local_68[1]);
uVar6 = (int)uVar3 + iVar2 * 2;
*param_3 = uVar6;
if (uVar6 < 100) {
uVar3 = FUN_14010db30(local_68[2]);
iVar2 = (int)uVar3 * 5;
uVar3 = FUN_14010db30(local_68[3]);
uVar6 = (int)uVar3 + iVar2 * 2;
param_3[1] = uVar6;
if (0xc < uVar6) {
return 7;
}
uVar3 = FUN_14010db30(local_64);
iVar2 = (int)uVar3 * 5;
uVar3 = FUN_14010db30(local_63);
uVar6 = (int)uVar3 + iVar2 * 2;
param_3[2] = uVar6;
if (0x1f < uVar6) {
return 7;
}
uVar3 = FUN_14010db30(local_62);
iVar2 = (int)uVar3 * 5;
uVar3 = FUN_14010db30(local_61);
uVar6 = (int)uVar3 + iVar2 * 2;
param_3[3] = uVar6;
if (0x17 < uVar6) {
return 7;
}
uVar3 = FUN_14010db30(local_60);
iVar2 = (int)uVar3 * 5;
uVar3 = FUN_14010db30(local_5f);
uVar6 = (int)uVar3 + iVar2 * 2;
param_3[4] = uVar6;
if (0x3b < uVar6) {
return 7;
}
param_3[7] = 0;
param_3[8] = 0;
param_3[5] = 0;
param_3[6] = 0;
if (local_5e == 'Z') {
return 0;
}
if (local_5e == '+') {
uVar6 = 0;
}
else {
if (local_5e != '-') {
uVar3 = FUN_14010db30(local_5e);
iVar2 = (int)uVar3 * 5;
uVar3 = FUN_14010db30(local_5d);
uVar6 = (int)uVar3 + iVar2 * 2;
param_3[5] = uVar6;
if (0x3b < uVar6) {
return 7;
}
if (local_5c == 'Z') {
return 0;
}
if (local_5c != '+') {
if (local_5c != '-') {
return 7;
}
uVar5 = 1;
}
param_3[6] = uVar5;
uVar3 = FUN_14010db30(local_5b);
iVar2 = (int)uVar3 * 5;
uVar3 = FUN_14010db30(local_5a);
uVar6 = (int)uVar3 + iVar2 * 2;
param_3[7] = uVar6;
if (0x17 < uVar6) {
return 7;
}
uVar3 = FUN_14010db30(local_59);
iVar2 = (int)uVar3;
goto LAB_14010dde8;
}
uVar6 = 1;
}
param_3[6] = uVar6;
uVar3 = FUN_14010db30(local_5d);
iVar2 = (int)uVar3 * 5;
uVar3 = FUN_14010db30(local_5c);
uVar6 = (int)uVar3 + iVar2 * 2;
param_3[7] = uVar6;
if (uVar6 < 0x18) {
uVar3 = FUN_14010db30(local_5b);
iVar2 = (int)uVar3;
local_58 = local_5a;
LAB_14010dde8:
iVar2 = iVar2 * 5;
uVar3 = FUN_14010db30(local_58);
uVar6 = (int)uVar3 + iVar2 * 2;
param_3[8] = uVar6;
if (0x3b < uVar6) {
return 7;
}
return 0;
}
}
return 7;
}