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;
}