From 5f3ad4de939db19cc4b3566cd26c8089d9bd2935 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 23 May 2008 10:13:53 +0200 Subject: [PATCH] Avoid segfault if a '#directive' is used in the global controlDict --- .../functionEntry/functionEntry.C | 22 +++++++++++++++++++ .../includeEntry/includeEntry.C | 11 ++++++++-- .../inputModeEntry/inputModeEntry.C | 11 ++++++++-- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.C index b051949884..7e53591c64 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.C +++ b/src/OpenFOAM/db/dictionary/functionEntries/functionEntry/functionEntry.C @@ -63,6 +63,17 @@ bool Foam::functionEntry::insert "primitiveEntry& entry, Istream& is)" ); + if (!insertprimitiveEntryIstreamMemberFunctionTablePtr_) + { + cerr<<"functionEntry::insert" + << "(const word&, dictionary&, primitiveEntry&, Istream&)" + << " not yet initialized, function = " + << functionName.c_str() << std::endl; + + // return true to keep reading anyhow + return true; + } + insertprimitiveEntryIstreamMemberFunctionTable::iterator mfIter = insertprimitiveEntryIstreamMemberFunctionTablePtr_->find(functionName); @@ -97,6 +108,17 @@ bool Foam::functionEntry::insert "(const word& functionName, dictionary& parentDict, Istream& is)" ); + if (!insertdictionaryIstreamMemberFunctionTablePtr_) + { + cerr<<"functionEntry::insert" + << "(const word&, dictionary&, Istream&)" + << " not yet initialized, function = " + << functionName.c_str() << std::endl; + + // Return true to keep reading + return true; + } + insertdictionaryIstreamMemberFunctionTable::iterator mfIter = insertdictionaryIstreamMemberFunctionTablePtr_->find(functionName); diff --git a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C index 49679209db..81a8c0b23f 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C +++ b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C @@ -31,12 +31,19 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +const Foam::word Foam::functionEntries::includeEntry::typeName +( + Foam::functionEntries::includeEntry::typeName_() +); + +// Don't lookup the debug switch here as the debug switch dictionary +// might include includeEntry +int Foam::functionEntries::includeEntry::debug(0); + namespace Foam { namespace functionEntries { - defineTypeNameAndDebug(includeEntry, 0); - addToMemberFunctionSelectionTable ( functionEntry, diff --git a/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.C index b75ffa1d32..27b1e78f5e 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.C +++ b/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.C @@ -30,12 +30,19 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +const Foam::word Foam::functionEntries::inputModeEntry::typeName +( + Foam::functionEntries::inputModeEntry::typeName_() +); + +// Don't lookup the debug switch here as the debug switch dictionary +// might include inputModeEntries +int Foam::functionEntries::inputModeEntry::debug(0); + namespace Foam { namespace functionEntries { - defineTypeNameAndDebug(inputModeEntry, 0); - addToMemberFunctionSelectionTable ( functionEntry,