undefined4 FUN_00405bb8(undefined4 param_1,int param_2)
{
int iVar1;
int iVar2;
size_t sVar3;
char *__s1;
size_t sVar4;
int iVar5;
FILE *__s;
int iVar6;
char *pcVar7;
uint __n;
undefined4 uVar8;
uint uVar9;
char *__s2;
uint uVar10;
FILE *pFVar11;
int iVar12;
fpos_t fStack_470;
uint local_464;
char acStack_460 [16];
undefined1 auStack_450 [1024];
int local_50;
int local_4c;
int local_48;
int local_44;
int local_40;
int local_3c;
fpos_t *local_38;
__mbstate_t *local_34;
undefined1 *local_30;
iVar1 = sobj_new();
local_3c = sobj_new();
local_50 = sobj_new();
if (((iVar1 == 0) || (local_3c == 0)) || (local_50 == 0)) {
pcVar7 = "sobj_new() error!";
}
else {
if (DAT_00430e60 != (char *)0x0) {
pFVar11 = fopen(DAT_00430e60,"r+") //possible issue identified - semgrep
if (pFVar11 == (FILE *)0x0) {
pcVar7 = "ERR_FOPEN_FAIL";
}
else {
sobj_add_string(local_3c,&DAT_00430de0);
iVar2 = sobj_strchr(local_3c,0x5f);
if (iVar2 != 0) {
iVar1 = sobj_split(local_3c,iVar2);
sobj_free(iVar1);
sobj_add_string(iVar1,"signature=");
uVar8 = sobj_get_string(local_3c);
sobj_add_string(iVar1,uVar8);
sobj_add_string(iVar1,"_aLpHa");
}
uVar8 = sobj_get_string(iVar1);
iVar2 = cgibin_verify_seamafile(pFVar11,uVar8);
if (-1 < iVar2) {
LAB_00405e84:
rewind(pFVar11);
local_38 = &fStack_470;
local_34 = &fStack_470.__state;
local_30 = auStack_450;
local_40 = 0;
iVar2 = 0;
local_44 = 0;
iVar12 = 0;
local_48 = 0;
local_4c = 0;
pcVar7 = (char *)0x0;
do {
iVar6 = feof(pFVar11);
if ((iVar6 != 0) || (iVar6 = ferror(pFVar11), iVar6 != 0)) goto LAB_00406598;
fgetpos(pFVar11,local_38);
sVar3 = fread(local_34,0xc,1,pFVar11) //possible issue identified - semgrep
if (sVar3 != 1) goto LAB_00406598;
uVar9 = (ZEXT24(fStack_470.__state.__value.__wch._2_2_) & 0xff) << 8 |
(uint)((ushort)fStack_470.__state.__value.__wch._2_2_ >> 8);
if (0x400 < uVar9) {
pcVar7 = "ERR_SEAMA_META_TOO_LARGE";
goto LAB_00405e70;
}
uVar10 = local_464 << 0x18 | local_464 >> 0x18 | (local_464 & 0xff0000) >> 8 |
(local_464 & 0xff00) << 8;
if ((uVar10 != 0) && (sVar3 = fread(local_30,1,0x10,pFVar11), sVar3 != 0x10)) { //possible issue identified - semgrep
pcVar7 = "ERR_SEAMA_CHECKSUM_ERR";
goto LAB_00405e70;
}
iVar6 = 0x1c;
if (uVar9 != 0) {
sVar3 = fread(local_30,1,uVar9,pFVar11) //possible issue identified - semgrep
if (sVar3 != uVar9) {
pcVar7 = "ERR_SEAMA_META_ERR";
goto LAB_00405e70;
}
pcVar7 = (char *)0x0;
iVar2 = sobj_get_length(local_50);
if (iVar2 != 0) {
pcVar7 = (char *)sobj_get_string(local_50);
}
local_4c = local_48;
uVar9 = 0;
iVar2 = local_40;
iVar12 = local_44;
do {
__s1 = (char *)sobj_get_string(iVar1);
__s2 = local_30 + uVar9;
iVar6 = strcasecmp(__s1,__s2);
if (iVar6 != 0) {
iVar6 = strcasecmp("noheader=1",__s2);
if (iVar6 == 0) {
if (uVar10 == 0) {
local_48 = local_48 + 1;
}
else {
local_4c = local_4c + 1;
}
}
else {
iVar6 = strncasecmp("type=",__s2,5);
if (iVar6 == 0) {
iVar6 = strcasecmp("type=firmware",__s2);
if (iVar6 == 0) {
if (uVar10 == 0) {
local_40 = local_40 + 1;
}
else {
iVar2 = iVar2 + 1;
}
}
else {
iVar6 = strcasecmp("type=devconf",__s2);
if (iVar6 == 0) {
if (uVar10 == 0) {
local_44 = local_44 + 1;
}
else {
iVar12 = iVar12 + 1;
}
}
else {
iVar2 = 0;
iVar12 = 0;
}
}
}
else {
iVar6 = strncasecmp("dev=",__s2,4);
if (iVar6 == 0) {
if (uVar10 == 0) {
sobj_add_string(local_50,local_30 + uVar9 + 4);
}
else {
pcVar7 = local_30 + uVar9 + 4;
}
}
}
}
}
sVar4 = strlen(__s2);
uVar9 = uVar9 + sVar4 + 1;
} while (uVar9 < sVar3);
iVar6 = sVar3 + 0x1c //possible issue identified - semgrep
}
if (uVar10 != 0) {
if (param_2 == 0) {
if ((pcVar7 != (char *)0x0) &&
(iVar5 = strcmp("/dev/mtdblock/2",pcVar7), iVar5 != 0)) {
if (local_4c == 0) {
fsetpos(pFVar11,&fStack_470);
uVar10 = iVar6 + uVar10;
}
if (iVar12 != 0) {
pcVar7 = "/var/config.xml.gz";
}
__s = fopen(pcVar7,"w+") //possible issue identified - semgrep
iVar2 = 0;
uVar9 = uVar10;
goto LAB_004062e0;
}
}
else if ((param_2 == 1) && (iVar2 != 0)) {
fclose(pFVar11);
rename(DAT_00430e60,"/var/firmware.seama") //possible issue identified - semgrep
sprintf(acStack_460,"%lu",uVar10) //possible issue identified - semgrep
pFVar11 = fopen("/var/session/imagesize","w+") //possible issue identified - semgrep
if (pFVar11 != (FILE *)0x0) {
sVar3 = strlen(acStack_460);
fwrite(acStack_460,1,sVar3,pFVar11);
fclose(pFVar11);
}
iVar2 = 1;
goto LAB_0040666c;
}
do {
iVar6 = feof(pFVar11);
if (iVar6 != 0) break;
iVar6 = ferror(pFVar11);
if (iVar6 != 0) break;
uVar9 = uVar10;
if (0x400 < uVar10) {
uVar9 = 0x400;
}
sVar3 = fread(local_30,1,uVar9,pFVar11) //possible issue identified - semgrep
uVar10 = uVar10 - sVar3;
} while (uVar10 != 0);
}
} while( true );
}
rewind(pFVar11);
sobj_free(iVar1);
sobj_add_string(iVar1,"signature=");
sobj_add_string(iVar1,&DAT_00430de0);
uVar8 = sobj_get_string(iVar1);
iVar2 = cgibin_verify_seamafile(pFVar11,uVar8);
if (-1 < iVar2) goto LAB_00405e84;
pcVar7 = "ERR_INVALID_SEAMA";
}
LAB_00405e70:
uVar8 = 0xffffffff;
sobj_add_string(param_1,pcVar7);
goto LAB_004065b4;
}
pcVar7 = "ERR_NO_FILE";
}
uVar8 = 0xffffffff;
sobj_add_string(param_1,pcVar7);
pFVar11 = (FILE *)0x0;
goto LAB_004065b4;
LAB_004062e0:
if ((uVar9 == 0) || (iVar6 = feof(pFVar11), iVar6 != 0)) goto LAB_0040632c;
iVar6 = ferror(pFVar11);
if (iVar6 != 0) goto LAB_0040632c;
iVar2 = iVar2 + 1;
__n = uVar9;
if (0x400 < uVar9) {
__n = 0x400;
}
sVar3 = fread(auStack_450,1,__n,pFVar11) //possible issue identified - semgrep
uVar9 = uVar9 - sVar3;
if (__s != (FILE *)0x0) {
fwrite(auStack_450,1,sVar3,__s);
}
goto LAB_004062e0;
LAB_0040632c:
if (__s != (FILE *)0x0) {
fclose(__s);
}
if (iVar12 != 0) {
system("devconf put -f /var/config.xml.gz") //possible issue identified - semgrep
unlink("/var/config.xml.gz") //possible issue identified - semgrep
iVar2 = iVar2 + 1;
}
fclose(pFVar11);
sprintf(acStack_460,"%lu",uVar10) //possible issue identified - semgrep
pFVar11 = fopen("/var/session/configsize","w+") //possible issue identified - semgrep
if (pFVar11 != (FILE *)0x0) {
sVar3 = strlen(acStack_460);
fwrite(acStack_460,1,sVar3,pFVar11);
fclose(pFVar11);
}
LAB_0040666c:
uVar8 = 0;
pFVar11 = (FILE *)0x0;
if (iVar2 == 0) {
LAB_00406598:
sobj_add_string(param_1,"ERR_INVALID_FILE");
uVar8 = 0xffffffff;
}
LAB_004065b4:
if (iVar1 != 0) {
sobj_del(iVar1);
}
if (local_3c != 0) {
sobj_del(local_3c);
}
if (local_50 != 0) {
sobj_del(local_50);
}
if (pFVar11 != (FILE *)0x0) {
fclose(pFVar11);
}
return uVar8;
}