author | zautrix <zautrix> | 2004-07-03 23:59:49 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-07-03 23:59:49 (UTC) |
commit | 22470ff7ffe034a94bedb52b517ee4d245ae2808 (patch) (side-by-side diff) | |
tree | 44cbe6a45c6ebb6c5dd64fa035cd995ee3b4d463 | |
parent | 260befadfaa64d94de7d38d7f6cad0d22f52c226 (diff) | |
download | kdepimpi-22470ff7ffe034a94bedb52b517ee4d245ae2808.zip kdepimpi-22470ff7ffe034a94bedb52b517ee4d245ae2808.tar.gz kdepimpi-22470ff7ffe034a94bedb52b517ee4d245ae2808.tar.bz2 |
Fixed memory access violation in distlist handling
-rw-r--r-- | microkde/kconfig.cpp | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/microkde/kconfig.cpp b/microkde/kconfig.cpp index 3f23ed2..b882adb 100644 --- a/microkde/kconfig.cpp +++ b/microkde/kconfig.cpp @@ -309,92 +309,130 @@ void KConfig::sync() << dt.date().month() << "," << dt.date().day() << "," << dt.time().hour() << "," << dt.time().minute() << "," << dt.time().second() << endl; } f.close(); mDirty = false; } //US I took the following deleteGroup method from a newer version from KDE. /** * Deletes a configuration entry group * * If the group is not empty and bDeep is false, nothing gets * deleted and false is returned. * If this group is the current group and it is deleted, the * current group is undefined and should be set with setGroup() * before the next operation on the configuration object. * * @param group The name of the group * returns true if we deleted at least one entry. */ bool KConfig::deleteGroup( const QString& group) { bool dirty = false; int pos; QMap<QString,bool>::Iterator itBool; + QMap<QString,bool>::Iterator delBool; + while ( itBool != mBoolMap.end() ) { + pos = itBool.key().find( group ); + if (pos == 0) { + delBool = itBool; + ++itBool; + mBoolMap.remove(delBool); + dirty = true; + } + + } + /* for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool ) { pos = itBool.key().find( group ); if (pos == 0) { mBoolMap.remove(itBool); dirty = true; } } + */ + QMap<QString,QString>::Iterator itString = mStringMap.begin(); + QMap<QString,QString>::Iterator delString ; + while( itString != mStringMap.end() ) { + pos = itString.key().find( group ); + if (pos == 0) { + delString = itString; + ++itString; + mStringMap.remove(delString); + //qDebug("delte++++++++++++++++++ "); + dirty = true; + } - QMap<QString,QString>::Iterator itString; + } + /* this leads to a memory access violation for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString ) { pos = itString.key().find( group ); if (pos == 0) { mStringMap.remove(itString); dirty = true; } } - - QMap<QString,QDateTime>::Iterator itDateTime; + */ + QMap<QString,QDateTime>::Iterator itDateTime= mDateTimeMap.begin(); + QMap<QString,QDateTime>::Iterator delDateTime; + while ( itDateTime != mDateTimeMap.end() ) { + pos = itDateTime.key().find( group ); + if (pos == 0) { + delDateTime = itDateTime; + ++itDateTime; + mDateTimeMap.remove(delDateTime); + dirty = true; + } + + } + /* for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime ) { pos = itDateTime.key().find( group ); if (pos == 0) { mDateTimeMap.remove(itDateTime); dirty = true; } } + */ if (dirty) mDirty = true; return dirty; } //US I took the following hasGroup method from a newer version from KDE. /** * Returns true if the specified group is known about. * * @param group The group to search for. * @return Whether the group exists. */ bool KConfig::hasGroup(const QString &group) const { QMap<QString,bool>::ConstIterator itBool; for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool ) { if (itBool.key().find( group ) == 0) { return true; } } QMap<QString,QString>::ConstIterator itString; for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString ) { if (itString.key().find( group ) == 0) { return true; } } |