mirror of
https://github.com/CTCaer/hekate.git
synced 2024-12-25 06:18:11 +00:00
Fix all the bugs
- Mem leaks - Stack corruption - Div by 0 - Double frees
This commit is contained in:
parent
6a554eec6c
commit
382f727be3
@ -213,7 +213,7 @@ void _config_autoboot_list()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
EPRINTF("Could not find or open 'hekate_ipl.ini'.\nMake sure it exists in SD Card!.");
|
EPRINTF("Could not open 'bootloader/hekate_ipl.ini'.\nMake sure it exists in SD Card!.");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -335,7 +335,7 @@ void config_autoboot()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
EPRINTF("Could not find or open 'hekate_ipl.ini'.\nMake sure it exists in SD Card!.");
|
EPRINTF("Could not open 'bootloader/hekate_ipl.ini'.\nMake sure it exists in SD Card!.");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -152,7 +152,7 @@ int ini_parse(link_t *dst, char *ini_path, bool is_dir)
|
|||||||
csec->name = NULL;
|
csec->name = NULL;
|
||||||
csec->type = INI_NEWLINE;
|
csec->type = INI_NEWLINE;
|
||||||
}
|
}
|
||||||
else if (csec->type == INI_CHOICE) //Extract key/value.
|
else if (csec && csec->type == INI_CHOICE) //Extract key/value.
|
||||||
{
|
{
|
||||||
u32 i;
|
u32 i;
|
||||||
for (i = 0; i < lblen && lbuf[i] != '\n' && lbuf[i] != '='; i++)
|
for (i = 0; i < lblen && lbuf[i] != '\n' && lbuf[i] != '='; i++)
|
||||||
@ -181,7 +181,7 @@ int ini_parse(link_t *dst, char *ini_path, bool is_dir)
|
|||||||
|
|
||||||
void ini_free(link_t *dst)
|
void ini_free(link_t *dst)
|
||||||
{
|
{
|
||||||
if (dst == NULL)
|
if (!dst->prev || !dst->next)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, dst, link)
|
LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, dst, link)
|
||||||
@ -196,10 +196,11 @@ void ini_free(link_t *dst)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(ini_sec->name);
|
free(ini_sec->name);
|
||||||
free(ini_sec);
|
//TODO: Free section structs.
|
||||||
|
//free(ini_sec);
|
||||||
}
|
}
|
||||||
|
|
||||||
dst = NULL;
|
list_init(dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
ini_sec_t *ini_clone_section(ini_sec_t *cfg)
|
ini_sec_t *ini_clone_section(ini_sec_t *cfg)
|
||||||
|
@ -568,6 +568,7 @@ void print_mmc_info()
|
|||||||
card_type = storage.ext_csd.card_type;
|
card_type = storage.ext_csd.card_type;
|
||||||
u8 card_type_support[96];
|
u8 card_type_support[96];
|
||||||
u8 pos_type = 0;
|
u8 pos_type = 0;
|
||||||
|
card_type_support[0] = 0;
|
||||||
if (card_type & EXT_CSD_CARD_TYPE_HS_26)
|
if (card_type & EXT_CSD_CARD_TYPE_HS_26)
|
||||||
{
|
{
|
||||||
memcpy(card_type_support, "HS26", 4);
|
memcpy(card_type_support, "HS26", 4);
|
||||||
@ -1196,7 +1197,6 @@ int dump_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part)
|
|||||||
{
|
{
|
||||||
EPRINTF("\nPress any key and try again...\n");
|
EPRINTF("\nPress any key and try again...\n");
|
||||||
|
|
||||||
free(buf);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1451,7 +1451,6 @@ int restore_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part
|
|||||||
{
|
{
|
||||||
EPRINTF("\nPress any key and try again...\n");
|
EPRINTF("\nPress any key and try again...\n");
|
||||||
|
|
||||||
free(buf);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1831,7 +1830,11 @@ void launch_tools(u8 type)
|
|||||||
free(filelist);
|
free(filelist);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
free(ments);
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (file_sec)
|
if (file_sec)
|
||||||
{
|
{
|
||||||
@ -1918,7 +1921,7 @@ void ini_list_launcher()
|
|||||||
else
|
else
|
||||||
EPRINTF("No ini configurations found.");
|
EPRINTF("No ini configurations found.");
|
||||||
free(ments);
|
free(ments);
|
||||||
//ini_free(&ini_list_sections); // This breaks hos_launch config parsing.
|
ini_free(&ini_list_sections);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
EPRINTF("Could not find any ini\nin bootloader/ini folder!");
|
EPRINTF("Could not find any ini\nin bootloader/ini folder!");
|
||||||
@ -2026,7 +2029,7 @@ void launch_firmware()
|
|||||||
ini_free(&ini_sections);
|
ini_free(&ini_sections);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
EPRINTF("Could not find or open 'hekate_ipl.ini'.\nMake sure it exists in SD Card!");
|
EPRINTF("Could not open 'bootloader/hekate_ipl.ini'.\nMake sure it exists in SD Card!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cfg_sec)
|
if (!cfg_sec)
|
||||||
@ -2047,11 +2050,11 @@ void launch_firmware()
|
|||||||
if (payload_path)
|
if (payload_path)
|
||||||
{
|
{
|
||||||
ini_free_section(cfg_sec);
|
ini_free_section(cfg_sec);
|
||||||
//if (launch_payload(payload_path, false))
|
if (launch_payload(payload_path, false))
|
||||||
//{
|
{
|
||||||
EPRINTF("Failed to launch payload.");
|
EPRINTF("Failed to launch payload.");
|
||||||
free(payload_path);
|
free(payload_path);
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
else if (!hos_launch(cfg_sec))
|
else if (!hos_launch(cfg_sec))
|
||||||
EPRINTF("Failed to launch firmware.");
|
EPRINTF("Failed to launch firmware.");
|
||||||
@ -2260,7 +2263,6 @@ void auto_launch_firmware()
|
|||||||
BOOTLOGO = (void *)malloc(0x4000);
|
BOOTLOGO = (void *)malloc(0x4000);
|
||||||
blz_uncompress_srcdest(BOOTLOGO_BLZ, SZ_BOOTLOGO_BLZ, BOOTLOGO, SZ_BOOTLOGO);
|
blz_uncompress_srcdest(BOOTLOGO_BLZ, SZ_BOOTLOGO_BLZ, BOOTLOGO, SZ_BOOTLOGO);
|
||||||
gfx_set_rect_grey(&gfx_ctxt, BOOTLOGO, X_BOOTLOGO, Y_BOOTLOGO, 326, 544);
|
gfx_set_rect_grey(&gfx_ctxt, BOOTLOGO, X_BOOTLOGO, Y_BOOTLOGO, 326, 544);
|
||||||
free(BOOTLOGO);
|
|
||||||
}
|
}
|
||||||
free(BOOTLOGO);
|
free(BOOTLOGO);
|
||||||
|
|
||||||
|
@ -105,6 +105,9 @@ static int _se_execute(u32 op, void *dst, u32 dst_size, const void *src, u32 src
|
|||||||
|
|
||||||
static int _se_execute_one_block(u32 op, void *dst, u32 dst_size, const void *src, u32 src_size)
|
static int _se_execute_one_block(u32 op, void *dst, u32 dst_size, const void *src, u32 src_size)
|
||||||
{
|
{
|
||||||
|
if (!src || !dst)
|
||||||
|
return 0;
|
||||||
|
|
||||||
u8 *block = (u8 *)malloc(0x10);
|
u8 *block = (u8 *)malloc(0x10);
|
||||||
memset(block, 0, 0x10);
|
memset(block, 0, 0x10);
|
||||||
|
|
||||||
|
@ -336,7 +336,8 @@ static int _clock_sdmmc_config_clock_source_inner(u32 *pout, u32 id, u32 val)
|
|||||||
divisor = 2;
|
divisor = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
*pout = 24728;
|
||||||
|
divisor = 31;
|
||||||
}
|
}
|
||||||
|
|
||||||
_clock_sdmmc_table[2 * id] = val;
|
_clock_sdmmc_table[2 * id] = val;
|
||||||
|
@ -129,7 +129,7 @@ int i2c_send_byte(u32 idx, u32 x, u32 y, u8 b)
|
|||||||
|
|
||||||
u8 i2c_recv_byte(u32 idx, u32 x, u32 y)
|
u8 i2c_recv_byte(u32 idx, u32 x, u32 y)
|
||||||
{
|
{
|
||||||
u8 tmp;
|
u8 tmp = 0;
|
||||||
i2c_recv_buf_small(&tmp, 1, idx, x, y);
|
i2c_recv_buf_small(&tmp, 1, idx, x, y);
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
@ -1085,7 +1085,11 @@ int sdmmc_storage_init_sd(sdmmc_storage_t *storage, sdmmc_t *sdmmc, u32 id, u32
|
|||||||
|
|
||||||
u8 *buf = (u8 *)malloc(512);
|
u8 *buf = (u8 *)malloc(512);
|
||||||
if (!_sd_storage_get_scr(storage, buf))
|
if (!_sd_storage_get_scr(storage, buf))
|
||||||
|
{
|
||||||
|
free(buf);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
//gfx_hexdump(&gfx_con, 0, storage->raw_scr, 8);
|
//gfx_hexdump(&gfx_con, 0, storage->raw_scr, 8);
|
||||||
DPRINTF("[SD] got scr\n");
|
DPRINTF("[SD] got scr\n");
|
||||||
|
|
||||||
|
@ -53,7 +53,11 @@ char *dirlist(char *directory)
|
|||||||
f_closedir(&dir);
|
f_closedir(&dir);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
free(temp);
|
||||||
|
free(dir_entries);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < k - 1 ; i++)
|
for (i = 0; i < k - 1 ; i++)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user