undefined4 FUN_00408408(char *param_1,int param_2)
{
byte bVar1;
ushort uVar2;
int iVar3;
FILE *__stream;
size_t sVar4;
size_t sVar5;
char *pcVar6;
uint uVar7;
byte *pbVar8;
uint uVar9;
undefined4 uVar10;
uint local_4f8;
ushort local_4f2;
uint local_4f0;
byte local_4ec [16];
byte local_4dc [16];
byte abStack_4cc [4];
stat sStack_4c8;
char acStack_430 [1024];
uint *local_30;
byte *local_2c;
iVar3 = stat(param_1,&sStack_4c8) //possible issue identified - semgrep
if (iVar3 < 0) {
if (param_2 == 0) {
return 0xffffffff;
}
pcVar6 = "Unable to get the info of \'%s\'\n";
}
else {
__stream = fopen(param_1,"r+") //possible issue identified - semgrep
if (__stream != (FILE *)0x0) {
if (param_2 != 0) {
printf("FILE - %s (%d bytes)\n",param_1,sStack_4c8.st_blocks);
}
local_30 = &local_4f8;
local_2c = abStack_4cc;
uVar10 = 0xffffffff;
LAB_00408808:
iVar3 = feof(__stream);
if (((iVar3 == 0) && (iVar3 = ferror(__stream), iVar3 == 0)) &&
(sVar4 = fread(local_30,0xc,1,__stream), uVar2 = local_4f2, sVar4 == 1)) {
if (local_4f8 == 0x17a4a35e) {
uVar7 = (uint)local_4f2;
uVar9 = local_4f0 << 0x18 | local_4f0 >> 0x18 | local_4f0 >> 8 & 0xff00 |
(local_4f0 & 0xff00) << 8;
if ((uVar9 == 0) || (sVar4 = fread(local_4ec,0x10,1,__stream), sVar4 == 1)) { //possible issue identified - semgrep
uVar7 = (uVar7 & 0xff) << 8 | (uint)(uVar2 >> 8);
if (uVar7 < 0x401) {
sVar4 = fread(acStack_430,1,uVar7,__stream) //possible issue identified - semgrep
if (sVar4 == uVar7) goto LAB_00408608;
if (param_2 != 0) {
pcVar6 = "Unable to read SEAMA META data!";
goto LAB_004085f4;
}
}
else if (param_2 != 0) {
pcVar6 = "META data in SEAMA header is too large!";
goto LAB_004085f4;
}
}
else if (param_2 != 0) {
pcVar6 = "Error reading checksum !";
goto LAB_004085f4;
}
}
else if (param_2 != 0) {
pcVar6 = "Invalid SEAMA magic. Probably no more SEAMA!";
goto LAB_004085f4;
}
goto LAB_0040889c;
}
if (param_2 == 0) goto LAB_0040889c;
goto LAB_00408848;
}
if (param_2 == 0) {
return 0xffffffff;
}
pcVar6 = "Unable to open \'%s\' for reading!\n";
}
printf(pcVar6,param_1);
return 0xffffffff;
LAB_00408608:
if (param_2 != 0) {
puts("SEAMA ==========================================");
printf(" magic : %08x\n",
local_4f8 << 0x18 | local_4f8 >> 0x18 | local_4f8 >> 8 & 0xff00 |
(local_4f8 & 0xff00) << 8);
printf(" meta size : %d bytes\n",sVar4);
for (uVar7 = 0; pcVar6 = acStack_430 + uVar7, uVar7 < sVar4; uVar7 = uVar7 + sVar5 + 1) {
printf(" meta data : %s\n",pcVar6);
sVar5 = strlen(pcVar6);
}
printf(" image size : %d bytes\n",uVar9);
}
if (uVar9 != 0) {
if (param_2 != 0) {
printf(" checksum : ");
pbVar8 = local_4ec;
do {
bVar1 = *pbVar8;
pbVar8 = pbVar8 + 1;
printf("%02X",(uint)bVar1);
} while (pbVar8 != local_4dc);
putchar(10);
}
pbVar8 = local_4dc;
FUN_004082bc(__stream,uVar9,pbVar8);
if (param_2 != 0) {
printf(" digest : ");
do {
printf("%02X",(uint)*pbVar8);
pbVar8 = pbVar8 + 1;
} while (pbVar8 != local_2c);
putchar(10);
}
iVar3 = memcmp(local_4ec,local_4dc,0x10);
if (iVar3 != 0) {
if (param_2 == 0) goto LAB_0040889c;
pcVar6 = "!!ERROR!! checksum error !!";
LAB_004085f4:
puts(pcVar6);
LAB_00408848:
puts("================================================");
LAB_0040889c:
fclose(__stream);
return uVar10;
}
uVar10 = 0;
}
goto LAB_00408808;
}