Skip to content
Snippets Groups Projects
Commit 13ccaf7b authored by Joe Ho's avatar Joe Ho
Browse files

5589 Fix memory leaks in Rejistry++

parent 194b6d74
No related branches found
No related tags found
No related merge requests found
......@@ -48,6 +48,10 @@ namespace Rejistry {
*/
virtual REGFHeader * getHeader() const = 0;
/**
* Virtual destructor to prevent memory leak
*/
virtual ~RegistryHive() {}
};
};
......
......@@ -47,7 +47,10 @@ namespace Rejistry {
}
RegistryKey * RegistryHiveBuffer::getRoot() const {
return new RegistryKey(getHeader()->getRootNKRecord());
REGFHeader *header = getHeader();
Rejistry::NKRecord *nkRecord = header->getRootNKRecord();
delete header;
return new RegistryKey(nkRecord);
}
REGFHeader * RegistryHiveBuffer::getHeader() const {
......
......@@ -68,16 +68,29 @@ namespace Rejistry {
RegistryKey::RegistryKeyPtrList RegistryKey::getSubkeyList() const {
std::vector<RegistryKey *> subkeys;
NKRecord::NKRecordPtrList nkRecordList = _nk->getSubkeyList()->getSubkeys();
SubkeyListRecord::SubkeyListRecordPtr subkeyListRecordPtr = _nk->getSubkeyList();
NKRecord::NKRecordPtrList nkRecordList = subkeyListRecordPtr->getSubkeys();
NKRecord::NKRecordPtrList::iterator it;
for (it = nkRecordList.begin(); it != nkRecordList.end(); ++it) {
subkeys.push_back(new RegistryKey(*it));
}
delete subkeyListRecordPtr;
return subkeys;
}
size_t RegistryKey::getSubkeyListSize() const {
std::vector<RegistryKey *> subkeys;
SubkeyListRecord::SubkeyListRecordPtr subkeyListRecordPtr = _nk->getSubkeyList();
NKRecord::NKRecordPtrList nkRecordList = subkeyListRecordPtr->getSubkeys();
delete subkeyListRecordPtr;
return nkRecordList.size();
}
RegistryKey::RegistryKeyPtr RegistryKey::getSubkey(const std::wstring& name) const {
return new RegistryKey(_nk->getSubkeyList()->getSubkey(name));
SubkeyListRecord::SubkeyListRecordPtr subkeyListRecordPtr = _nk->getSubkeyList();
Rejistry::NKRecord *nkRecord = subkeyListRecordPtr->getSubkey(name);
delete subkeyListRecordPtr;
return new RegistryKey(nkRecord);
}
RegistryValue::RegistryValuePtrList RegistryKey::getValueList() const {
......@@ -90,7 +103,17 @@ namespace Rejistry {
return values;
}
size_t RegistryKey::getValueListSize() const {
Rejistry::ValueListRecord *valueListRecord = _nk->getValueList();
size_t size = valueListRecord->getValuesSize();
delete valueListRecord;
return size;
}
RegistryValue::RegistryValuePtr RegistryKey::getValue(const std::wstring& name) const {
return new RegistryValue(_nk->getValueList()->getValue(name));
Rejistry::ValueListRecord *valueListRecord = _nk->getValueList();
Rejistry::VKRecord *vkRecord = valueListRecord->getValue(name);
delete valueListRecord;
return new RegistryValue(vkRecord);
}
};
......@@ -73,6 +73,13 @@ namespace Rejistry {
*/
RegistryKeyPtrList getSubkeyList() const;
/**
* Get number of subkeys for the current registry key.
* @returns number of subkeys.
* @throws RegistryParseException on error.
*/
size_t getSubkeyListSize() const;
/**
* Get the subkey with the given name.
* @param name ASCII name of the subkey of retrieve.
......@@ -88,6 +95,13 @@ namespace Rejistry {
*/
RegistryValue::RegistryValuePtrList getValueList() const;
/**
* Get number of values for the current key.
* @returns Number of values.
* @throws RegistryParseException on error.
*/
size_t getValueListSize() const;
/**
* Get the value for the given name.
* @param name ASCII name of the value to retrieve.
......
......@@ -68,6 +68,11 @@ namespace Rejistry {
_type = type;
}
~ValueData() {
if (_buf)
delete _buf;
}
VALUE_TYPES getValueType() const { return _type; };
/**
......
......@@ -61,6 +61,11 @@ namespace Rejistry {
*/
VKRecord::VKRecordPtr getValue(const std::wstring& name) const;
/**
* @returns The ValueListRecord size
*/
size_t getValuesSize() const { return _numValues; }
private:
static const uint16_t VALUE_LIST_OFFSET = 0x00;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment