Skip to content

Commit 962afed

Browse files
Merge pull request #17729 from pstef/limit-stack-usage
2 parents 873c467 + b0109b5 commit 962afed

2 files changed

Lines changed: 26 additions & 17 deletions

File tree

command.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -743,13 +743,12 @@ bool command_show_osd_msg(command_t *cmd, const char* arg)
743743

744744
bool command_load_state_slot(command_t *cmd, const char *arg)
745745
{
746-
char state_path[16384];
746+
char state_path[PATH_MAX_LENGTH] = "";
747747
size_t _len = 0;
748748
char reply[128] = "";
749749
unsigned int slot = (unsigned int)strtoul(arg, NULL, 10);
750750
bool savestates_enabled = core_info_current_supports_savestate();
751751
bool ret = false;
752-
state_path[0] = '\0';
753752
_len = strlcpy(reply, "LOAD_STATE_SLOT ", sizeof(reply));
754753
_len += snprintf(reply + _len, sizeof(reply) - _len, "%d", slot);
755754
if (savestates_enabled)
@@ -1362,7 +1361,7 @@ void command_event_init_cheats(
13621361

13631362
bool command_event_load_entry_state(settings_t *settings)
13641363
{
1365-
char entry_state_path[PATH_MAX_LENGTH];
1364+
char entry_state_path[PATH_MAX_LENGTH] = "";
13661365
int entry_path_stats;
13671366
runloop_state_t *runloop_st = runloop_state_get_ptr();
13681367
bool ret = false;
@@ -1379,8 +1378,6 @@ bool command_event_load_entry_state(settings_t *settings)
13791378
return false;
13801379
#endif
13811380

1382-
entry_state_path[0] = '\0';
1383-
13841381
if (!runloop_get_entry_state_path(
13851382
entry_state_path, sizeof(entry_state_path),
13861383
runloop_st->entry_state_slot))
@@ -2112,15 +2109,13 @@ void command_event_remove_current_config(enum override_type type)
21122109

21132110
bool command_event_main_state(unsigned cmd)
21142111
{
2115-
char msg[128];
2116-
char state_path[16384]; /* TODO/FIXME - reduce this */
2112+
char msg[128] = "";
2113+
char state_path[PATH_MAX_LENGTH] = "";
21172114
size_t _len = 0;
21182115
settings_t *settings = config_get_ptr();
21192116
bool savestates_enabled = core_info_current_supports_savestate();
21202117
bool ret = false;
21212118

2122-
state_path[0] = msg[0] = '\0';
2123-
21242119
if (savestates_enabled)
21252120
{
21262121
size_t info_size;

tasks/task_database_cue.c

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,18 @@ int detect_ps1_game(intfstream_t *fd, char *s, size_t len, const char *filename)
187187
{
188188
int pos;
189189
char raw_game_id[50];
190-
char disc_data[DISC_DATA_SIZE_PS1];
190+
char *disc_data = malloc(DISC_DATA_SIZE_PS1);
191191

192-
/* Load data into buffer and use pointers */
193-
if (intfstream_seek(fd, 0, SEEK_SET) < 0)
192+
if (!disc_data)
194193
return false;
195194

196-
if (intfstream_read(fd, disc_data, DISC_DATA_SIZE_PS1) <= 0)
195+
/* Load data into buffer and use pointers */
196+
if (intfstream_seek(fd, 0, SEEK_SET) < 0
197+
|| intfstream_read(fd, disc_data, DISC_DATA_SIZE_PS1) <= 0)
198+
{
199+
free(disc_data);
197200
return false;
201+
}
198202

199203
disc_data[DISC_DATA_SIZE_PS1 - 1] = '\0';
200204

@@ -238,6 +242,7 @@ int detect_ps1_game(intfstream_t *fd, char *s, size_t len, const char *filename)
238242

239243
string_remove_all_whitespace(s, raw_game_id);
240244
cue_append_multi_disc_suffix(s, filename);
245+
free(disc_data);
241246
return true;
242247
}
243248
}
@@ -247,6 +252,7 @@ int detect_ps1_game(intfstream_t *fd, char *s, size_t len, const char *filename)
247252

248253
string_remove_all_whitespace(s, raw_game_id);
249254
cue_append_multi_disc_suffix(s, filename);
255+
free(disc_data);
250256
return true;
251257
}
252258
else if (string_is_equal_fast(raw_game_id, "PSX.EXE", STRLEN_CONST("PSX.EXE")))
@@ -255,6 +261,7 @@ int detect_ps1_game(intfstream_t *fd, char *s, size_t len, const char *filename)
255261

256262
string_remove_all_whitespace(s, raw_game_id);
257263
cue_append_multi_disc_suffix(s, filename);
264+
free(disc_data);
258265
return false;
259266
}
260267
}
@@ -271,6 +278,7 @@ int detect_ps1_game(intfstream_t *fd, char *s, size_t len, const char *filename)
271278
s[9 ] = 'X';
272279
s[10] = '\0';
273280
cue_append_multi_disc_suffix(s, filename);
281+
free(disc_data);
274282
return false;
275283
}
276284

@@ -404,14 +412,18 @@ int detect_psp_game(intfstream_t *fd, char *s, size_t len, const char *filename)
404412
{
405413
#define DISC_DATA_SIZE_PSP 40000
406414
int pos;
407-
char disc_data[DISC_DATA_SIZE_PSP];
415+
char *disc_data = malloc(DISC_DATA_SIZE_PSP);
408416

409-
/* Load data into buffer and use pointers */
410-
if (intfstream_seek(fd, 0, SEEK_SET) < 0)
417+
if (!disc_data)
411418
return false;
412419

413-
if (intfstream_read(fd, disc_data, DISC_DATA_SIZE_PSP) <= 0)
420+
/* Load data into buffer and use pointers */
421+
if (intfstream_seek(fd, 0, SEEK_SET) < 0
422+
|| intfstream_read(fd, disc_data, DISC_DATA_SIZE_PSP) <= 0)
423+
{
424+
free(disc_data);
414425
return false;
426+
}
415427

416428
disc_data[DISC_DATA_SIZE_PSP - 1] = '\0';
417429

@@ -455,11 +467,13 @@ int detect_psp_game(intfstream_t *fd, char *s, size_t len, const char *filename)
455467
)
456468
{
457469
cue_append_multi_disc_suffix(s, filename);
470+
free(disc_data);
458471
return true;
459472
}
460473
}
461474
}
462475

476+
free(disc_data);
463477
return false;
464478
}
465479

0 commit comments

Comments
 (0)