[Scummvm-cvs-logs] SF.net SVN: scummvm:[40489] scummvm/trunk/engines/kyra
lordhoto at users.sourceforge.net
lordhoto at users.sourceforge.net
Tue May 12 16:35:50 CEST 2009
Revision: 40489
http://scummvm.svn.sourceforge.net/scummvm/?rev=40489&view=rev
Author: lordhoto
Date: 2009-05-12 14:35:50 +0000 (Tue, 12 May 2009)
Log Message:
-----------
Add proper error checking in file parsing code.
Modified Paths:
--------------
scummvm/trunk/engines/kyra/script.cpp
scummvm/trunk/engines/kyra/script_tim.cpp
Modified: scummvm/trunk/engines/kyra/script.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script.cpp 2009-05-12 14:18:08 UTC (rev 40488)
+++ scummvm/trunk/engines/kyra/script.cpp 2009-05-12 14:35:50 UTC (rev 40489)
@@ -83,13 +83,15 @@
case MKID_BE('TEXT'):
scriptData->text = new byte[chunk->size];
assert(scriptData->text);
- chunk->read(scriptData->text, chunk->size);
+ if (chunk->read(scriptData->text, chunk->size) != chunk->size)
+ error("Couldn't read TEXT chunk from file '%s'", filename);
break;
case MKID_BE('ORDR'):
scriptData->ordr = new uint16[chunk->size >> 1];
assert(scriptData->ordr);
- chunk->read(scriptData->ordr, chunk->size);
+ if (chunk->read(scriptData->ordr, chunk->size) != chunk->size)
+ error("Couldn't read ORDR chunk from file '%s'", filename);
for (int i = (chunk->size >> 1) - 1; i >= 0; --i)
scriptData->ordr[i] = READ_BE_UINT16(&scriptData->ordr[i]);
@@ -98,7 +100,8 @@
case MKID_BE('DATA'):
scriptData->data = new uint16[chunk->size >> 1];
assert(scriptData->data);
- chunk->read(scriptData->data, chunk->size);
+ if (chunk->read(scriptData->data, chunk->size) != chunk->size)
+ error("Couldn't read DATA chunk from file '%s'", filename);
for (int i = (chunk->size >> 1) - 1; i >= 0; --i)
scriptData->data[i] = READ_BE_UINT16(&scriptData->data[i]);
@@ -110,18 +113,15 @@
}
}
- if (!scriptData->ordr) {
- unload(scriptData);
- error("Couldn't read ORDR chunk from file: '%s'", filename);
- return false;
- }
+ if (!scriptData->ordr)
+ error("No ORDR chunk found in file: '%s'", filename);
- if (!scriptData->data) {
- unload(scriptData);
- error("Couldn't read DATA chunk from file: '%s'", filename);
- return false;
- }
+ if (!scriptData->data)
+ error("No DATA chunk found in file: '%s'", filename);
+ if (stream->err())
+ error("Read error while parsing file '%s", filename);
+
delete stream;
scriptData->sysFuncs = opcodes;
Modified: scummvm/trunk/engines/kyra/script_tim.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.cpp 2009-05-12 14:18:08 UTC (rev 40488)
+++ scummvm/trunk/engines/kyra/script_tim.cpp 2009-05-12 14:35:50 UTC (rev 40489)
@@ -149,7 +149,8 @@
avtlChunkSize = chunk->size >> 1;
tim->avtl = new uint16[avtlChunkSize];
assert(tim->avtl);
- chunk->read(tim->avtl, chunk->size);
+ if (chunk->read(tim->avtl, chunk->size) != chunk->size)
+ error("Couldn't read AVTL chunk from file '%s'", filename);
for (int i = avtlChunkSize - 1; i >= 0; --i)
tim->avtl[i] = READ_LE_UINT16(&tim->avtl[i]);
@@ -161,11 +162,14 @@
}
}
+ if (!tim->avtl)
+ error("No AVTL chunk found in file: '%s'", filename);
+
+ if (stream->err())
+ error("Read error while parsing file '%s", filename);
+
delete stream;
- if (!tim->avtl)
- error("Couldn't read AVTL chunk from file: '%s'", filename);
-
int num = (avtlChunkSize < TIM::kCountFuncs) ? avtlChunkSize : (int)TIM::kCountFuncs;
for (int i = 0; i < num; ++i)
tim->func[i].avtl = tim->avtl + tim->avtl[i];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list