mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-12-27 00:09:53 -05:00
Fix typo in Group::findGroupByPath found by sonarcloud (#2233)
* Group::findGroupByPath now limited to search from root (matching current usage) * Factors out Group::findGroupByPathRecursion (on prenormalized strings).
This commit is contained in:
parent
d9fcdd2920
commit
32456e1b24
@ -570,30 +570,36 @@ Entry* Group::findEntryByPath(QString entryPath, QString basePath)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Group* Group::findGroupByPath(QString groupPath, QString basePath)
|
Group* Group::findGroupByPath(QString groupPath)
|
||||||
{
|
{
|
||||||
|
|
||||||
Q_ASSERT(!groupPath.isNull());
|
Q_ASSERT(!groupPath.isNull());
|
||||||
|
|
||||||
QStringList possiblePaths;
|
// normalize the groupPath by adding missing front and rear slashes. once.
|
||||||
possiblePaths << groupPath;
|
QString normalizedGroupPath;
|
||||||
if (!groupPath.startsWith("/")) {
|
|
||||||
possiblePaths << QString("/" + groupPath);
|
|
||||||
}
|
|
||||||
if (!groupPath.endsWith("/")) {
|
|
||||||
possiblePaths << QString(groupPath + "/");
|
|
||||||
}
|
|
||||||
if (!groupPath.endsWith("/") && !groupPath.endsWith("/")) {
|
|
||||||
possiblePaths << QString("/" + groupPath + "/");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (possiblePaths.contains(basePath)) {
|
if (groupPath == "") {
|
||||||
|
normalizedGroupPath = QString("/"); // root group
|
||||||
|
} else {
|
||||||
|
normalizedGroupPath = ((groupPath.startsWith("/"))? "" : "/")
|
||||||
|
+ groupPath
|
||||||
|
+ ((groupPath.endsWith("/") )? "" : "/");
|
||||||
|
}
|
||||||
|
return findGroupByPathRecursion(normalizedGroupPath, "/");
|
||||||
|
}
|
||||||
|
|
||||||
|
Group* Group::findGroupByPathRecursion(QString groupPath, QString basePath)
|
||||||
|
{
|
||||||
|
// paths must be normalized
|
||||||
|
Q_ASSERT(groupPath.startsWith("/") && groupPath.endsWith("/"));
|
||||||
|
Q_ASSERT(basePath.startsWith("/") && basePath.endsWith("/"));
|
||||||
|
|
||||||
|
if (groupPath == basePath) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Group* innerGroup : children()) {
|
for (Group* innerGroup : children()) {
|
||||||
QString innerBasePath = basePath + innerGroup->name() + "/";
|
QString innerBasePath = basePath + innerGroup->name() + "/";
|
||||||
Group* group = innerGroup->findGroupByPath(groupPath, innerBasePath);
|
Group* group = innerGroup->findGroupByPathRecursion(groupPath, innerBasePath);
|
||||||
if (group != nullptr) {
|
if (group != nullptr) {
|
||||||
return group;
|
return group;
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ public:
|
|||||||
Entry* findEntry(QString entryId);
|
Entry* findEntry(QString entryId);
|
||||||
Entry* findEntryByUuid(const QUuid& uuid);
|
Entry* findEntryByUuid(const QUuid& uuid);
|
||||||
Entry* findEntryByPath(QString entryPath, QString basePath = QString(""));
|
Entry* findEntryByPath(QString entryPath, QString basePath = QString(""));
|
||||||
Group* findGroupByPath(QString groupPath, QString basePath = QString("/"));
|
Group* findGroupByPath(QString groupPath);
|
||||||
QStringList locate(QString locateTerm, QString currentPath = QString("/"));
|
QStringList locate(QString locateTerm, QString currentPath = QString("/"));
|
||||||
Entry* addEntryWithPath(QString entryPath);
|
Entry* addEntryWithPath(QString entryPath);
|
||||||
void setUuid(const QUuid& uuid);
|
void setUuid(const QUuid& uuid);
|
||||||
@ -195,6 +195,8 @@ private:
|
|||||||
void cleanupParent();
|
void cleanupParent();
|
||||||
void recCreateDelObjects();
|
void recCreateDelObjects();
|
||||||
|
|
||||||
|
Group* findGroupByPathRecursion(QString groupPath, QString basePath);
|
||||||
|
|
||||||
QPointer<Database> m_db;
|
QPointer<Database> m_db;
|
||||||
QUuid m_uuid;
|
QUuid m_uuid;
|
||||||
GroupData m_data;
|
GroupData m_data;
|
||||||
|
Loading…
Reference in New Issue
Block a user