int base64decode(byte *param_1,int param_2,int *param_3)
{
byte bVar1;
byte *pbVar2;
char cVar3;
char *pcVar4;
int iVar5;
byte *pbVar6;
char local_18 [8];
if ((param_1 == (byte *)0x0) || (param_2 == 0)) {
*param_3 = 0;
return 0;
}
pbVar2 = (byte *)malloc(((int)(((uint)(param_2 * 3 >> 0x1f) >> 0x1e) + param_2 * 3) >> 2) + 4) //possible issue identified - semgrep
*param_3 = (int)pbVar2;
pbVar6 = param_1 + param_2;
LAB_004151ac:
if (pbVar6 < param_1) {
iVar5 = *param_3;
*pbVar2 = 0;
return (int)pbVar2 - iVar5;
}
iVar5 = 0;
pcVar4 = local_18;
LAB_004150e8:
do {
bVar1 = *param_1;
param_1 = param_1 + 1;
if ((bVar1 - 0x2b & 0xff) < 0x50) {
cVar3 = "socket(0x%x), fd(%d), param(0x%x), handler(0x%x)\n"[bVar1 + 0x25] //possible issue identified - semgrep
if (cVar3 != '\0') {
if (cVar3 == '$') goto LAB_00415128;
cVar3 = cVar3 + -0x3d //possible issue identified - semgrep
}
}
else {
LAB_00415128:
cVar3 = '\0';
}
if (pbVar6 < param_1) {
*pcVar4 = '\0';
}
else {
if (cVar3 == '\0') goto LAB_004150e8;
*pcVar4 = cVar3 + -1;
iVar5 = iVar5 + 1;
}
if ((pcVar4 == local_18 + 3) || (pcVar4 = pcVar4 + 1, pbVar6 < param_1)) break;
} while( true );
if (iVar5 != 0) {
*pbVar2 = local_18[0] << 2 | (byte)local_18[1] >> 4;
pbVar2[1] = local_18[1] << 4 | (byte)local_18[2] >> 2;
pbVar2[2] = local_18[2] << 6 | local_18[3];
pbVar2 = pbVar2 + iVar5 + -1;
}
goto LAB_004151ac;
}