ENH: more graceful handling of invalid IOobject headers (issue #539)

- With special-purpose templating it is possible to have file contents
  that almost look like an OpenFOAM file, but which are not.
  The contents do not need to be deliberately tricky, even the simplest
  README:

      FoamFile is the first word parsed in OpenFOAM files

  will trigger problems.
  We now trap any IOerror on these and reject this type of file as invalid.
This commit is contained in:
Mark Olesen
2017-07-29 13:22:24 +02:00
parent 797155f862
commit 9923ec969b

View File

@ -154,14 +154,14 @@ Foam::IOobjectList::IOobjectList
}
// Create a list of file names in this directory
fileNameList objNames =
const auto objNames =
readDir(db.path(newInstance, db.dbDir()/local), fileName::FILE);
forAll(objNames, i)
for (const auto& objName : objNames)
{
IOobject* objectPtr = new IOobject
(
objNames[i],
objName,
newInstance,
local,
db,
@ -170,8 +170,23 @@ Foam::IOobjectList::IOobjectList
registerObject
);
// Use object with local scope
if (objectPtr->typeHeaderOk<IOList<label>>(false))
bool ok = false;
const bool throwingIOerr = FatalIOError.throwExceptions();
try
{
// Use object with local scope and current instance (no searching)
ok = objectPtr->typeHeaderOk<IOList<label>>(false, false);
}
catch (Foam::IOerror& err)
{
Warning
<< err << nl << endl;
}
FatalIOError.throwExceptions(throwingIOerr);
if (ok)
{
insert(objectPtr->name(), objectPtr);
}