void run_script(int param_1,undefined4 param_2)
{
char cVar1;
byte bVar2;
byte bVar3;
byte bVar4;
ushort uVar5;
__pid_t __pid;
int iVar6;
byte *pbVar7;
undefined4 uVar8;
undefined *puVar9;
uint *__src;
int iVar10;
uint *puVar11;
byte bVar12;
size_t sVar13;
uint uVar14;
uint uVar15;
uint uVar16;
undefined1 *puVar17;
char *pcVar18;
char *pcVar19;
undefined4 *puVar20;
int iVar21;
int iVar22;
int iVar23;
double dVar24;
uint uVar25;
uint uVar26;
uint in_fcsr;
undefined *puVar27;
int local_64;
uint local_60 [2];
undefined1 *local_58;
int local_54;
uint local_50;
int local_4c;
int local_48;
undefined4 *local_44;
undefined4 *local_40;
uint *local_3c;
if (PTR_s__usr_share_udhcpc_default_script_0041b50c == (undefined *)0x0) {
return;
}
__pid = vfork() //possible issue identified - semgrep
if (__pid != 0) {
waitpid(__pid,(int *)0x0,0);
return;
}
if (param_1 == 0) {
local_48 = 0;
local_4c = 0;
local_50 = 0;
sVar13 = 0x14 //possible issue identified - semgrep
goto LAB_0040754c;
}
iVar22 = 0;
if (DAT_0041b675 != '\0') {
pcVar18 = &DAT_0041b68b;
do {
iVar6 = get_option(param_1);
if (iVar6 != 0) {
iVar22 = iVar22 + 1;
}
cVar1 = *pcVar18;
pcVar18 = pcVar18 + 0x16;
} while (cVar1 != '\0');
}
iVar6 = get_option(param_1,0xd4);
local_4c = iVar6 + -2;
if ((iVar6 == 0) || (*(byte *)(iVar6 + -1) < 0x12)) {
local_48 = 0;
local_4c = 0;
}
else if (*(byte *)(iVar6 + -1) < 0x16) {
local_48 = 0;
iVar22 = iVar22 + 3;
}
else {
local_48 = 1;
iVar22 = iVar22 + 4;
}
if (*(int *)(param_1 + 0x14) != 0) {
iVar22 = iVar22 + 1;
}
pbVar7 = (byte *)get_option(param_1,0x34);
if (pbVar7 == (byte *)0x0) {
local_50 = 0;
bVar12 = 0;
LAB_00408250:
if (*(char *)(param_1 + 0x6c) != '\0') {
iVar22 = iVar22 + 1;
}
}
else {
bVar12 = *pbVar7;
local_50 = (uint)(char)bVar12;
if ((bVar12 & 1) == 0) {
bVar12 = bVar12 & 2;
goto LAB_00408250;
}
bVar12 = bVar12 & 2;
}
if ((bVar12 == 0) && (*(char *)(param_1 + 0x2c) != '\0')) {
sVar13 = (iVar22 + 6) * 4 //possible issue identified - semgrep
}
else {
sVar13 = (iVar22 + 5) * 4 //possible issue identified - semgrep
}
LAB_0040754c:
local_40 = (undefined4 *)malloc(sVar13) //possible issue identified - semgrep
sVar13 = strlen(PTR_DAT_0041b504);
pcVar18 = (char *)malloc(sVar13 + 0xb) //possible issue identified - semgrep
puVar9 = PTR_DAT_0041b504;
*local_40 = pcVar18;
sprintf(pcVar18,"interface=%s",puVar9) //possible issue identified - semgrep
uVar8 = FUN_00407300(&DAT_0040a730,"PATH=/bin:/usr/bin:/sbin:/usr/sbin");
local_40[1] = uVar8;
uVar8 = FUN_00407300(&DAT_0040a75c,"HOME=/");
local_40[2] = uVar8;
local_44 = local_40;
if (param_1 == 0) {
local_40[3] = 0;
}
else {
pcVar18 = (char *)malloc(0x13) //possible issue identified - semgrep
uVar15 = (uint)*(byte *)(param_1 + 0x12);
uVar16 = (uint)*(byte *)(param_1 + 0x13);
bVar12 = *(byte *)(param_1 + 0x10);
uVar14 = (uint)*(byte *)(param_1 + 0x11);
local_40[3] = pcVar18;
puVar27 = &DAT_0040a780;
sprintf(pcVar18,"%s%d.%d.%d.%d%s",&DAT_0040a77c,(uint)bVar12,uVar14,uVar15,uVar16,&DAT_0040a780) //possible issue identified - semgrep
;
puVar9 = &options;
if (DAT_0041b675 == '\0') {
local_54 = 4;
}
else {
iVar22 = 0;
uVar26 = 0x3fc00000;
local_54 = 4;
do {
__src = (uint *)get_option(param_1);
puVar20 = local_44;
iVar6 = local_54;
if (__src != (uint *)0x0) {
bVar12 = *(byte *)((int)__src + -2);
if (bVar12 == 0x79) {
bVar12 = *(byte *)((int)__src + -1);
if (bVar12 == 0) {
iVar23 = 0;
}
else {
iVar21 = 0;
iVar23 = 0;
uVar25 = 0x3fc00000;
puVar11 = __src;
do {
iVar23 = iVar23 + 0x33;
dVar24 = ceil((double)(byte)*puVar11 * (double)((ulonglong)uVar25 << 0x20));
if ((((in_fcsr | 3) ^ 2) & 3) == 0) {
dVar24 = ROUND(dVar24);
}
else {
dVar24 = FLOOR(dVar24);
}
iVar21 = iVar21 + (int)dVar24 + 5;
puVar11 = (uint *)((int)__src + iVar21);
} while (iVar21 < (int)(uint)bVar12);
}
sVar13 = strlen(&options + iVar22 * 0x16) //possible issue identified - semgrep
LAB_0040803c:
pcVar18 = (char *)malloc(sVar13 + 2 + iVar23) //possible issue identified - semgrep
puVar20[iVar6] = pcVar18;
}
else {
if (bVar12 == 0xf9) {
bVar12 = *(byte *)((int)__src + -1);
if (bVar12 == 0) {
iVar23 = 0;
}
else {
iVar21 = 0;
iVar23 = 0;
uVar25 = 0x3fc00000;
do {
iVar23 = iVar23 + 0x33;
dVar24 = ceil((double)*(byte *)((int)__src + iVar21) *
(double)((ulonglong)uVar25 << 0x20));
if ((((in_fcsr | 3) ^ 2) & 3) == 0) {
dVar24 = ROUND(dVar24);
}
else {
dVar24 = FLOOR(dVar24);
}
iVar21 = iVar21 + (int)dVar24 + 5;
} while (iVar21 < (int)(uint)bVar12);
}
sVar13 = strlen(&options + iVar22 * 0x16) //possible issue identified - semgrep
goto LAB_0040803c;
}
if (bVar12 == 0x21) {
bVar12 = puVar9[0x14];
sVar13 = strlen(&options + iVar22 * 0x16) //possible issue identified - semgrep
}
else {
bVar12 = puVar9[0x14];
sVar13 = strlen(&options + iVar22 * 0x16) //possible issue identified - semgrep
}
iVar6 = (bVar12 & 0xf) * 4;
if (*(int *)(option_lengths + iVar6) == 0) {
trap(0x1c00);
}
pcVar18 = (char *)malloc(sVar13 + 2 +
((int)(uint)*(byte *)((int)__src + -1) /
*(int *)(option_lengths + iVar6)) *
*(int *)(&UNK_0040a894 + iVar6)) //possible issue identified - semgrep
local_44[local_54] = pcVar18;
}
sVar13 = (size_t)*(byte *)((int)__src + -1) //possible issue identified - semgrep
local_60[0] = 0;
iVar6 = sprintf(pcVar18,"%s=",puVar9) //possible issue identified - semgrep
local_58 = (undefined1 *)((byte)puVar9[0x14] & 0xf);
local_3c = &switchD_00407864::switchdataD_0040a860 + (int)local_58;
iVar23 = *(int *)(option_lengths + (int)local_58 * 4);
pcVar18 = pcVar18 + iVar6;
do {
if ((undefined1 *)0xc < local_58) {
switchD_00407864_caseD_4077e4:
goto LAB_004077e8;
}
puVar17 = local_58;
switch((uint)(&_gp + *local_3c) & 0xfffffffe) {
case 0x4077e4:
goto switchD_00407864_caseD_4077e4;
case 0x40786c:
iVar6 = sprintf(pcVar18,"%s%d.%d.%d.%d%s","",(uint)(byte)*__src,
(uint)*(byte *)((int)__src + 1),(uint)*(byte *)((int)__src + 2),
(uint)*(byte *)((int)__src + 3),&DAT_0040a780) //possible issue identified - semgrep
pcVar19 = pcVar18 + iVar6;
pcVar18 = pcVar19 + 1;
*pcVar19 = '/';
__src = __src + 1;
iVar23 = 4;
case 0x4078cc:
bVar12 = *(byte *)((int)__src + 1);
bVar2 = (byte)*__src;
bVar3 = *(byte *)((int)__src + 2);
bVar4 = *(byte *)((int)__src + 3);
goto LAB_00407908;
case 0x407920:
dVar24 = ceil((double)(byte)*__src * (double)((ulonglong)uVar26 << 0x20));
if ((((in_fcsr | 3) ^ 2) & 3) == 0) {
dVar24 = ROUND(dVar24);
}
else {
dVar24 = FLOOR(dVar24);
}
iVar6 = (int)dVar24;
local_60[0] = 0;
iVar23 = iVar6 + 5;
if (iVar6 == 0) {
local_64 = 0;
}
else {
local_64 = -1;
}
uVar14 = local_64 << (-(uint)(byte)*__src & 0x1f);
uVar15 = uVar14 >> 8 & 0xff00;
uVar16 = (uVar14 & 0xff00) << 8;
if (0 < iVar6) {
iVar21 = 0;
do {
iVar10 = iVar21 + 1;
pbVar7 = (byte *)((int)local_60 + iVar21);
iVar21 = iVar21 + 1;
*pbVar7 = *(byte *)((int)__src + iVar10);
} while (iVar21 < iVar6);
}
local_60[0] = local_60[0] & (uVar14 << 0x18 | uVar14 >> 0x18 | uVar15 | uVar16);
iVar21 = sprintf(pcVar18,"%s%d.%d.%d.%d%s","",local_60[0] & 0xff,
local_60[0] >> 8 & 0xff,local_60[0] >> 0x10 & 0xff,
local_60[0] >> 0x18,&DAT_0040a7bc) //possible issue identified - semgrep
pcVar18 = pcVar18 + iVar21;
iVar21 = sprintf(pcVar18,"%s%d.%d.%d.%d%s","",uVar14 >> 0x18,uVar15 >> 8,
uVar16 >> 0x10,uVar14 & 0xff,&DAT_0040a7bc) //possible issue identified - semgrep
iVar10 = sprintf(pcVar18 + iVar21,"%u,",(uint)(byte)*__src) //possible issue identified - semgrep
pbVar7 = (byte *)((int)__src + iVar6 + 1);
bVar12 = pbVar7[1];
bVar2 = *pbVar7;
bVar3 = pbVar7[2];
pcVar18 = pcVar18 + iVar21 + iVar10;
bVar4 = pbVar7[3];
LAB_00407908:
uVar16 = (uint)bVar4;
uVar15 = (uint)bVar3;
uVar14 = (uint)bVar12;
puVar27 = &DAT_0040a780;
iVar6 = sprintf(pcVar18,"%s%d.%d.%d.%d%s","",(uint)bVar2,uVar14,uVar15,uVar16,
&DAT_0040a780) //possible issue identified - semgrep
pcVar18 = pcVar18 + iVar6;
LAB_004077e8:
sVar13 = sVar13 - iVar23 //possible issue identified - semgrep
goto LAB_004077ec;
case 0x407aec:
iVar6 = sprintf(pcVar18,"%s%d.%d.%d.%d%s","",(uint)(byte)*__src,
(uint)*(byte *)((int)__src + 1),(uint)*(byte *)((int)__src + 2),
(uint)*(byte *)((int)__src + 3),&DAT_0040a7bc) //possible issue identified - semgrep
bVar12 = (byte)*__src;
pcVar19 = pcVar18 + iVar6;
if ((char)bVar12 < '\0') {
if ((bVar12 & 0xc0) == 0x80) {
builtin_strncpy(pcVar18 + iVar6,"255.255.0.0,16,",0x10) //possible issue identified - semgrep
pcVar19 = pcVar19 + 0xf;
}
else if ((bVar12 & 0xe0) == 0xc0) {
builtin_strncpy(pcVar18 + iVar6,"255.255.255.0,24,",0x12) //possible issue identified - semgrep
pcVar19 = pcVar19 + 0x11;
}
else {
builtin_strncpy(pcVar18 + iVar6,"255.255.255.255,32,",0x14) //possible issue identified - semgrep
pcVar19 = pcVar19 + 0x13;
}
}
else {
builtin_strncpy(pcVar18 + iVar6,"255.0.0.0,8,",0xd) //possible issue identified - semgrep
pcVar19 = pcVar19 + 0xc;
}
uVar14 = (uint)*(byte *)((int)__src + 5);
uVar15 = (uint)*(byte *)((int)__src + 6);
uVar16 = (uint)*(byte *)((int)__src + 7);
puVar27 = &DAT_0040a780;
iVar6 = sprintf(pcVar19,"%s%d.%d.%d.%d%s","",(uint)(byte)__src[1],uVar14,uVar15,uVar16
,&DAT_0040a780) //possible issue identified - semgrep
pcVar18 = pcVar19 + iVar6;
sVar13 = sVar13 - 4 //possible issue identified - semgrep
iVar23 = 4;
__src = __src + 1;
goto LAB_004077e8;
case 0x407be0:
uVar25 = *__src;
uVar25 = uVar25 << 0x18 | uVar25 >> 0x18 | uVar25 >> 8 & 0xff00 |
(uVar25 & 0xff00) << 8;
pcVar19 = "%ld ";
puVar17 = &DAT_00410000;
break;
case 0x407c38:
uVar25 = *__src;
uVar25 = uVar25 << 0x18 | uVar25 >> 0x18 | uVar25 >> 8 & 0xff00 |
(uVar25 & 0xff00) << 8;
pcVar19 = "%u ";
break;
case 0x407c80:
uVar5 = (ushort)*__src;
pcVar19 = "%d ";
LAB_00407ca0:
uVar25 = (uVar5 & 0xff) << 8 | (uint)(uVar5 >> 8);
break;
case 0x407cb8:
uVar5 = (ushort)*__src;
pcVar19 = "%u ";
goto LAB_00407ca0;
case 0x407cdc:
uVar25 = (uint)(byte)*__src;
pcVar19 = "%u ";
break;
case 0x407cf4:
if ((byte)*__src == 0) {
pcVar19 = "no ";
}
else {
pcVar19 = "yes ";
}
iVar6 = sprintf(pcVar18,pcVar19) //possible issue identified - semgrep
pcVar18 = pcVar18 + iVar6;
goto LAB_004077e8;
case 0x407d2c:
memcpy(pcVar18,__src,sVar13) //possible issue identified - semgrep
pcVar18[sVar13] = '\0';
goto LAB_00407d4c;
}
sVar13 = sVar13 - iVar23 //possible issue identified - semgrep
iVar6 = sprintf(pcVar18,pcVar19,uVar25,puVar17,uVar14,uVar15,uVar16,puVar27) //possible issue identified - semgrep
pcVar18 = pcVar18 + iVar6;
LAB_004077ec:
__src = (uint *)((int)__src + iVar23);
} while (0 < (int)sVar13);
LAB_00407d4c:
local_54 = local_54 + 1;
}
pcVar18 = puVar9 + 0x2b;
iVar22 = iVar22 + 1;
puVar9 = puVar9 + 0x16;
} while (*pcVar18 != '\0');
}
iVar22 = local_54;
if (*(int *)(param_1 + 0x14) != 0) {
pcVar18 = (char *)malloc(0x17) //possible issue identified - semgrep
uVar14 = (uint)*(byte *)(param_1 + 0x15);
uVar15 = (uint)*(byte *)(param_1 + 0x16);
uVar16 = (uint)*(byte *)(param_1 + 0x17);
bVar12 = *(byte *)(param_1 + 0x14);
local_40[iVar22] = pcVar18;
local_54 = iVar22 + 1;
puVar27 = &DAT_0040a780;
sprintf(pcVar18,"%s%d.%d.%d.%d%s","siaddr=",(uint)bVar12,uVar14,uVar15,uVar16,&DAT_0040a780) //possible issue identified - semgrep
}
uVar26 = local_50;
if (((local_50 & 1) == 0) && (*(char *)(param_1 + 0x6c) != '\0')) {
*(undefined1 *)(param_1 + 0xeb) = 0;
sVar13 = strlen((char *)(param_1 + 0x6c)) //possible issue identified - semgrep
pcVar18 = (char *)malloc(sVar13 + 0xb) //possible issue identified - semgrep
local_40[local_54] = pcVar18;
local_54 = local_54 + 1;
sprintf(pcVar18,"boot_file=%s",(char *)(param_1 + 0x6c),local_40,uVar14,uVar15,uVar16,puVar27) //possible issue identified - semgrep
;
}
if (((uVar26 & 2) == 0) && (*(char *)(param_1 + 0x2c) != '\0')) {
*(undefined1 *)(param_1 + 0x6b) = 0;
sVar13 = strlen((char *)(param_1 + 0x2c)) //possible issue identified - semgrep
pcVar18 = (char *)malloc(sVar13 + 7) //possible issue identified - semgrep
puVar20 = local_40 + local_54;
local_54 = local_54 + 1;
*puVar20 = pcVar18;
sprintf(pcVar18,"sname=%s",(char *)(param_1 + 0x2c)) //possible issue identified - semgrep
}
if (local_4c != 0) {
pcVar18 = (char *)malloc(0x18) //possible issue identified - semgrep
local_40[local_54] = pcVar18;
sprintf(pcVar18,"sixrd_msklen=%u",(uint)*(byte *)(local_4c + 2)) //possible issue identified - semgrep
iVar22 = local_54 + 1;
pcVar18 = (char *)malloc(0x1b) //possible issue identified - semgrep
local_40[iVar22] = pcVar18;
sprintf(pcVar18,"sixrd_prefixlen=%u",(uint)*(byte *)(local_4c + 3)) //possible issue identified - semgrep
puVar20 = local_40 + local_54 + 2;
pcVar18 = (char *)malloc(0x80) //possible issue identified - semgrep
builtin_strncpy(pcVar18,"sixrd_prefix",0xc) //possible issue identified - semgrep
*puVar20 = pcVar18;
pcVar18[0xc] = '=';
pcVar18[0xd] = '\0';
inet_ntop(10,(void *)(local_4c + 4),pcVar18 + 0xd,0x73) //possible issue identified - semgrep
local_54 = local_54 + 3;
if (local_48 != 0) {
puVar20 = local_40 + local_54;
pcVar18 = (char *)malloc(0x80) //possible issue identified - semgrep
builtin_strncpy(pcVar18,"sixrd_bripad",0xc) //possible issue identified - semgrep
*puVar20 = pcVar18;
builtin_strncpy(pcVar18 + 0xc,"dr=",4) //possible issue identified - semgrep
local_54 = local_54 + 1;
inet_ntop(2,(void *)(local_4c + 0x14),pcVar18 + 0xf,0x71) //possible issue identified - semgrep
}
}
local_40[local_54] = 0;
}
execle(PTR_s__usr_share_udhcpc_default_script_0041b50c,
PTR_s__usr_share_udhcpc_default_script_0041b50c,param_2,0,local_40) //possible issue identified - semgrep
/* WARNING: Subroutine does not return */
exit(1);
}