@@ -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