void attach_option(undefined4 *param_1,int param_2,void *param_3,size_t param_4)
{
byte bVar1;
undefined4 *puVar2;
undefined1 *puVar3;
void *pvVar4;
byte *__ptr;
undefined4 *puVar5;
undefined4 *puVar6;
int *piVar7;
piVar7 = (int *)*param_1;
if (piVar7 != (int *)0x0) {
__ptr = (byte *)*piVar7;
bVar1 = *__ptr;
while ((int)(uint)bVar1 < (int)*(char *)(param_2 + 0x15)) {
piVar7 = (int *)piVar7[1];
if (piVar7 == (int *)0x0) goto LAB_00408910;
__ptr = (byte *)*piVar7;
bVar1 = *__ptr;
}
if ((int)*(char *)(param_2 + 0x15) == (uint)bVar1) {
if ((*(byte *)(param_2 + 0x14) & 0x20) == 0) {
return;
}
if (0xff < (int)(__ptr[1] + param_4)) {
return;
}
pvVar4 = realloc(__ptr,__ptr[1] + param_4 + 2) //possible issue identified - semgrep
*piVar7 = (int)pvVar4;
memcpy((void *)((int)pvVar4 + *(byte *)((int)pvVar4 + 1) + 2),param_3,param_4) //possible issue identified - semgrep
*(char *)(*piVar7 + 1) = (char)param_4 + *(char *)(*piVar7 + 1);
return;
}
}
LAB_00408910:
puVar2 = (undefined4 *)malloc(8) //possible issue identified - semgrep
puVar3 = (undefined1 *)malloc(param_4 + 2) //possible issue identified - semgrep
*puVar3 = *(undefined1 *)(param_2 + 0x15);
*puVar2 = puVar3;
puVar3[1] = (char)param_4;
memcpy(puVar3 + 2,param_3,param_4) //possible issue identified - semgrep
puVar6 = (undefined4 *)*param_1;
if ((puVar6 == (undefined4 *)0x0) || (*(byte *)(param_2 + 0x15) <= *(byte *)*puVar6)) {
puVar2[1] = puVar6;
*param_1 = puVar2;
}
else {
do {
puVar5 = puVar6 + 1;
puVar6 = (undefined4 *)puVar6[1];
if (puVar6 == (undefined4 *)0x0) break;
} while (*(byte *)*puVar6 < *(byte *)(param_2 + 0x15));
puVar2[1] = puVar6;
*puVar5 = puVar2;
}
return;
}