Commit 9923ec96 authored by Mark OLESEN's avatar Mark OLESEN
Browse files

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.
parent 797155f8
......@@ -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);
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment