diff options
author | Daniel Pfeifer <daniel@pfeifer-mail.de> | 2016-06-16 21:51:36 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-06-20 14:56:39 (GMT) |
commit | fe27879c6b37d09084a740de843a54d39727c0f0 (patch) | |
tree | cf686de3d8576827d6f56f8e13710449f1864096 /Source/cmDependsJavaParserHelper.h | |
parent | f3d76a88b7d95b9275839c8270941557797e79fe (diff) | |
download | CMake-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.h | 17 |
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; |