summaryrefslogtreecommitdiffstats
path: root/Source/cmDependsJavaParserHelper.h
diff options
context:
space:
mode:
authorDaniel Pfeifer <daniel@pfeifer-mail.de>2016-06-16 21:51:36 (GMT)
committerBrad King <brad.king@kitware.com>2016-06-20 14:56:39 (GMT)
commitfe27879c6b37d09084a740de843a54d39727c0f0 (patch)
treecf686de3d8576827d6f56f8e13710449f1864096 /Source/cmDependsJavaParserHelper.h
parentf3d76a88b7d95b9275839c8270941557797e79fe (diff)
downloadCMake-fe27879c6b37d09084a740de843a54d39727c0f0.zip
CMake-fe27879c6b37d09084a740de843a54d39727c0f0.tar.gz
CMake-fe27879c6b37d09084a740de843a54d39727c0f0.tar.bz2
cmDependsJavaParserHelper: fix dangling pointer
The cmDependsJavaParserHelper tries to implement a "deep copy" in the assignment operator of the internal class CurrentClass. To do that, it uses std::copy and std::back_inserter. The copy constructor is implemented in terms of the assignment operator but it does not initialize the member NestedClasses, a pointer to vector. This pointer is dereferenced in the assignment operator. Change the pointer to a value and rely on the compiler generated special functions.
Diffstat (limited to 'Source/cmDependsJavaParserHelper.h')
-rw-r--r--Source/cmDependsJavaParserHelper.h17
1 files changed, 3 insertions, 14 deletions
diff --git a/Source/cmDependsJavaParserHelper.h b/Source/cmDependsJavaParserHelper.h
index a13d023..6ff0245 100644
--- a/Source/cmDependsJavaParserHelper.h
+++ b/Source/cmDependsJavaParserHelper.h
@@ -48,7 +48,7 @@ public:
// For yacc
void AddClassFound(const char* sclass);
- void PrepareElement(ParserType* opt);
+ void PrepareElement(ParserType* me);
void DeallocateParserType(char** pt);
void CheckEmpty(int line, int cnt, ParserType* pt);
void StartClass(const char* cls);
@@ -69,20 +69,9 @@ private:
{
public:
std::string Name;
- std::vector<CurrentClass>* NestedClasses;
- CurrentClass() { this->NestedClasses = new std::vector<CurrentClass>; }
- ~CurrentClass() { delete this->NestedClasses; }
- CurrentClass& operator=(CurrentClass const& c)
- {
- this->NestedClasses->clear();
- this->Name = c.Name;
- std::copy(c.NestedClasses->begin(), c.NestedClasses->end(),
- std::back_inserter(*this->NestedClasses));
- return *this;
- }
- CurrentClass(CurrentClass const& c) { (*this) = c; }
+ std::vector<CurrentClass> NestedClasses;
void AddFileNamesForPrinting(std::vector<std::string>* files,
- const char* prefix, const char* sep);
+ const char* prefix, const char* sep) const;
};
std::string CurrentPackage;
std::string::size_type InputBufferPos;