mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
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:
@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user