Skip to content
Snippets Groups Projects
Commit a43b7a91 authored by Mark Olesen's avatar Mark Olesen
Browse files

handle NULL pointer in regExp

parent 239c31f3
Branches
Tags
No related merge requests found
EXE_LIBS = \
$(FOAM_LIBBIN)/libOSspecific.o
......@@ -76,6 +76,36 @@ int main(int argc, char *argv[])
Info << endl;
}
Info<<"test regExp(const char*) ..." << endl;
string me("Mark");
if (regExp("[Mm]ar[ck]").match(me))
{
Info<< "matched: " << me << endl;
}
else
{
Info<< "no match" << endl;
}
if (regExp("").match(me))
{
Info<< "matched: " << me << endl;
}
else
{
Info<< "no match" << endl;
}
if (regExp(NULL).match(me))
{
Info<< "matched: " << me << endl;
}
else
{
Info<< "no match" << endl;
}
Info<< endl;
return 0;
......
......@@ -37,15 +37,20 @@ License
void Foam::regExp::compile(const char* pat) const
{
clear();
preg_ = new regex_t;
if (regcomp(preg_, pat, REG_EXTENDED) != 0)
// avoid NULL and zero-length patterns
if (pat && *pat)
{
FatalErrorIn
(
"regExp::compile(const char*)"
) << "Failed to compile regular expression '" << pat << "'"
<< exit(FatalError);
preg_ = new regex_t;
if (regcomp(preg_, pat, REG_EXTENDED) != 0)
{
FatalErrorIn
(
"regExp::compile(const char*)"
) << "Failed to compile regular expression '" << pat << "'"
<< exit(FatalError);
}
}
}
......@@ -60,6 +65,7 @@ void Foam::regExp::clear() const
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::regExp::regExp()
......@@ -83,6 +89,7 @@ Foam::regExp::regExp(const char* pat)
compile(pat);
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::regExp::~regExp()
......@@ -90,6 +97,7 @@ Foam::regExp::~regExp()
clear();
}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
int Foam::regExp::ngroups() const
......@@ -110,6 +118,7 @@ bool Foam::regExp::match
regmatch_t pmatch[1];
// match and also verify that the entire string was matched
// pmatch[0] is the entire match
if
(
regexec(preg_, str.c_str(), nmatch, pmatch, 0) == 0
......@@ -141,6 +150,8 @@ bool Foam::regExp::match
regmatch_t pmatch[nmatch];
// match and also verify that the entire string was matched
// pmatch[0] is the entire match
// pmatch[1..] are the (...) sub-groups
if
(
regexec(preg_, str.c_str(), nmatch, pmatch, 0) == 0
......@@ -179,8 +190,8 @@ bool Foam::regExp::match
return false;
}
// * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * * //
void Foam::regExp::operator=(const string& pat)
{
......@@ -193,4 +204,5 @@ void Foam::regExp::operator=(const char* pat)
compile(pat);
}
// ************************************************************************* //
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment