mirror of
https://github.com/libretro/RetroArch
synced 2025-03-23 19:21:03 +00:00
Merge pull request #4052 from leiradel/master
Fix huge count in cheevos_fill_md5 which makes RetroArch freeze
This commit is contained in:
commit
37e6372e04
15
cheevos.c
15
cheevos.c
@ -2244,13 +2244,10 @@ static size_t cheevos_eval_md5(
|
|||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
RFILE *file = filestream_open(info->path, RFILE_MODE_READ, 0);
|
RFILE *file = filestream_open(info->path, RFILE_MODE_READ, 0);
|
||||||
|
|
||||||
filestream_seek(file, offset, SEEK_SET);
|
|
||||||
|
|
||||||
if (!file)
|
if (!file)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (max_size == 0)
|
filestream_seek(file, offset, SEEK_SET);
|
||||||
max_size = (size_t)-1;
|
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@ -2258,7 +2255,7 @@ static size_t cheevos_eval_md5(
|
|||||||
ssize_t num_read;
|
ssize_t num_read;
|
||||||
size_t to_read = sizeof(buffer);
|
size_t to_read = sizeof(buffer);
|
||||||
|
|
||||||
if (to_read > max_size)
|
if (max_size != 0 && to_read > max_size)
|
||||||
to_read = max_size;
|
to_read = max_size;
|
||||||
|
|
||||||
num_read = filestream_read(file, (void*)buffer, to_read);
|
num_read = filestream_read(file, (void*)buffer, to_read);
|
||||||
@ -2268,6 +2265,8 @@ static size_t cheevos_eval_md5(
|
|||||||
|
|
||||||
MD5_Update(ctx, (void*)buffer, num_read);
|
MD5_Update(ctx, (void*)buffer, num_read);
|
||||||
size += num_read;
|
size += num_read;
|
||||||
|
|
||||||
|
if (max_size != 0)
|
||||||
max_size -= num_read;
|
max_size -= num_read;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2328,9 +2327,10 @@ static unsigned cheevos_find_game_id_snes(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (count < CHEEVOS_EIGHT_MB)
|
||||||
cheevos_fill_md5(CHEEVOS_EIGHT_MB - count, 0, &ctx);
|
cheevos_fill_md5(CHEEVOS_EIGHT_MB - count, 0, &ctx);
|
||||||
MD5_Final(hash, &ctx);
|
|
||||||
|
|
||||||
|
MD5_Final(hash, &ctx);
|
||||||
return cheevos_get_game_id(hash, &timeout);
|
return cheevos_get_game_id(hash, &timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2347,9 +2347,10 @@ static unsigned cheevos_find_game_id_genesis(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (count < CHEEVOS_SIX_MB)
|
||||||
cheevos_fill_md5(CHEEVOS_SIX_MB - count, 0, &ctx);
|
cheevos_fill_md5(CHEEVOS_SIX_MB - count, 0, &ctx);
|
||||||
MD5_Final(hash, &ctx);
|
|
||||||
|
|
||||||
|
MD5_Final(hash, &ctx);
|
||||||
return cheevos_get_game_id(hash, &timeout);
|
return cheevos_get_game_id(hash, &timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user