summaryrefslogtreecommitdiff
path: root/libpcsxcore/ppf.c
diff options
context:
space:
mode:
authorSND\dario86_cp <SND\dario86_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2011-03-12 18:54:28 +0000
committerSND\dario86_cp <SND\dario86_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2011-03-12 18:54:28 +0000
commita58cfdac407bc1d8fedc11acd924b275ba28cc51 (patch)
treeb4c2e08c34ef1bfe0ba947ef8eed931c9a43fc0e /libpcsxcore/ppf.c
parent9bdd06684bcc627c06ddcf4c406f6b48f0dfe389 (diff)
downloadpcsxr-a58cfdac407bc1d8fedc11acd924b275ba28cc51.tar.gz
Commited patch in issue #8171 (by darktjm).
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@64524 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/ppf.c')
-rw-r--r--libpcsxcore/ppf.c57
1 files changed, 42 insertions, 15 deletions
diff --git a/libpcsxcore/ppf.c b/libpcsxcore/ppf.c
index 44414a6c..59f4526f 100644
--- a/libpcsxcore/ppf.c
+++ b/libpcsxcore/ppf.c
@@ -210,10 +210,8 @@ void BuildPPFCache() {
ppffile = fopen(szPPF, "rb");
if (ppffile == NULL) return;
- memset(buffer, 0, 5);
- fread(buffer, 3, 1, ppffile);
-
- if (strcmp(buffer, "PPF") != 0) {
+ if (fread(buffer, 3, 1, ppffile) != 1 ||
+ strcmp(buffer, "PPF") != 0) {
SysPrintf(_("Invalid PPF patch: %s.\n"), szPPF);
fclose(ppffile);
return;
@@ -233,13 +231,21 @@ void BuildPPFCache() {
case 1: // ppf2
fseek(ppffile, -8, SEEK_END);
- memset(buffer, 0, 5);
- fread(buffer, 4, 1, ppffile);
+ if(fread(buffer, 4, 1, ppffile) != 1) {
+ SysPrintf(_("Invalid PPF patch: %s.\n"), szPPF);
+ fclose(ppffile);
+ return;
+ }
if (strcmp(".DIZ", buffer) != 0) {
dizyn = 0;
} else {
- fread(&dizlen, 4, 1, ppffile);
+ if(fread(&dizlen, 4, 1, ppffile) != 1) {
+ SysPrintf(_("Invalid PPF patch: %s.\n"), szPPF);
+ fclose(ppffile);
+ return;
+ }
+
dizlen = SWAP32(dizlen);
dizyn = 1;
}
@@ -265,12 +271,20 @@ void BuildPPFCache() {
fseek(ppffile, -6, SEEK_END);
memset(buffer, 0, 5);
- fread(buffer, 4, 1, ppffile);
+ if(fread(buffer, 4, 1, ppffile) != 1) {
+ SysPrintf(_("Invalid PPF patch: %s.\n"), szPPF);
+ fclose(ppffile);
+ return;
+ }
dizlen = 0;
if (strcmp(".DIZ", buffer) == 0) {
fseek(ppffile, -2, SEEK_END);
- fread(&dizlen, 2, 1, ppffile);
+ if(fread(&dizlen, 4, 1, ppffile) != 1) {
+ SysPrintf(_("Invalid PPF patch: %s.\n"), szPPF);
+ fclose(ppffile);
+ return;
+ }
dizlen = SWAP32(dizlen);
dizlen += 36;
}
@@ -297,13 +311,21 @@ void BuildPPFCache() {
// now do the data reading
do {
fseek(ppffile, seekpos, SEEK_SET);
- fread(&pos, 4, 1, ppffile);
+ if(fread(&pos, 4, 1, ppffile) != 1) {
+ SysPrintf(_("Invalid PPF patch: %s.\n"), szPPF);
+ fclose(ppffile);
+ return;
+ }
pos = SWAP32(pos);
- if (method == 2) fread(buffer, 4, 1, ppffile); // skip 4 bytes on ppf3 (no int64 support here)
+ if (method == 2) fseek(ppffile, 4, SEEK_CUR); // skip 4 bytes on ppf3 (no int64 support here)
anz = fgetc(ppffile);
- fread(ppfmem, anz, 1, ppffile);
+ if(fread(ppfmem, anz, 1, ppffile) != 1) {
+ SysPrintf(_("Invalid PPF patch: %s.\n"), szPPF);
+ fclose(ppffile);
+ return;
+ }
ladr = pos / CD_FRAMESIZE_RAW;
off = pos % CD_FRAMESIZE_RAW;
@@ -366,10 +388,15 @@ void LoadSBI() {
if (sbihandle == NULL) return;
// 4-byte SBI header
- fread(buffer, 1, 4, sbihandle);
+ if(fread(buffer, 4, 1, sbihandle) != 1) {
+ fclose(sbihandle);
+ return;
+ }
while (!feof(sbihandle)) {
- fread(sbitime[sbicount++], 1, 3, sbihandle);
- fread(buffer, 1, 11, sbihandle);
+ if(fread(sbitime[sbicount], 3, 1, sbihandle) != 1 ||
+ fread(buffer, 11, 1, sbihandle) != 1)
+ break;
+ sbicount++;
}
fclose(sbihandle);