diff --git a/lib/db_base.cpp b/lib/db_base.cpp index bb6f3fc8..4d7cc87d 100644 --- a/lib/db_base.cpp +++ b/lib/db_base.cpp @@ -400,7 +400,7 @@ QModelIndex db_base::index(int row, int column, QModelIndex db_base::index(pki_base *pki) const { - if (!pki || pki == treeItem) + if (!pki || pki == treeItem || rootItem->indexOf(pki) == -1) return QModelIndex(); return createIndex(rownumber(pki), 0, pki); } diff --git a/lib/db_x509.cpp b/lib/db_x509.cpp index 0c873e5a..6c997e35 100644 --- a/lib/db_x509.cpp +++ b/lib/db_x509.cpp @@ -112,6 +112,8 @@ QList db_x509::getAllIssuers() void db_x509::remFromCont(const QModelIndex &idx) { + if (!idx.isValid()) + return; db_crl *crls = Database.model(); db_x509super::remFromCont(idx); pki_base *pki = fromIndex(idx); diff --git a/lib/pki_base.cpp b/lib/pki_base.cpp index 30fded95..62ca3ac5 100644 --- a/lib/pki_base.cpp +++ b/lib/pki_base.cpp @@ -252,8 +252,7 @@ int pki_base::childCount() const int pki_base::indexOf(const pki_base *child) const { - int ret = childItems.indexOf(const_cast(child)); - return ret >= 0 ? ret : 0; + return childItems.indexOf(const_cast(child)); } void pki_base::takeChild(pki_base *pki) diff --git a/widgets/CertDetail.cpp b/widgets/CertDetail.cpp index 5e30239a..42d7a34f 100644 --- a/widgets/CertDetail.cpp +++ b/widgets/CertDetail.cpp @@ -269,7 +269,7 @@ void CertDetail::itemChanged(pki_base *pki) void CertDetail::showPubKey() { - KeyDetail::showKey(this, myPubKey, !keySqlId.isValid()); + KeyDetail::showKey(this, myPubKey, false); } void CertDetail::showIssuer() diff --git a/widgets/ImportMulti.cpp b/widgets/ImportMulti.cpp index f345ab0a..7e01a7ff 100644 --- a/widgets/ImportMulti.cpp +++ b/widgets/ImportMulti.cpp @@ -237,11 +237,12 @@ pki_base *ImportMulti::import(const QModelIndex &idx) pki_base *ImportMulti::import(pki_base *pki) { - QModelIndex idx = mcont->index(pki); if (!pki || pki->getSqlItemId().isValid()) return NULL; - mcont->remFromCont(idx); + QModelIndex idx = mcont->index(pki); + if (idx.isValid()) + mcont->remFromCont(idx); if (!Database.isOpen()) { try { diff --git a/widgets/KeyDetail.cpp b/widgets/KeyDetail.cpp index bab75736..1d7030b7 100644 --- a/widgets/KeyDetail.cpp +++ b/widgets/KeyDetail.cpp @@ -72,12 +72,13 @@ void KeyDetail::setupFingerprints(pki_key *key) } } -void KeyDetail::setKey(pki_key *key) +void KeyDetail::setKey(pki_key *key, bool import) { keySqlId = key->getSqlItemId(); descr->setText(key->getIntName()); keyLength->setText(key->length()); - connect_pki(key); + if (import) + connect_pki(key); keyPrivEx->disableToolTip(); if (!key->isToken()) @@ -151,12 +152,13 @@ void KeyDetail::itemChanged(pki_base *pki) descr->setText(pki->getIntName()); } -void KeyDetail::showKey(QWidget *parent, pki_key *key, bool ro) +void KeyDetail::showKey(QWidget *parent, pki_key *key, bool import) { if (!key) return; KeyDetail *dlg = new KeyDetail(parent); - dlg->setKey(key); + bool ro = !key->getSqlItemId().isValid(); + dlg->setKey(key, import); dlg->descr->setReadOnly(ro); dlg->comment->setReadOnly(ro); diff --git a/widgets/KeyDetail.h b/widgets/KeyDetail.h index 4d956677..0e7e060a 100644 --- a/widgets/KeyDetail.h +++ b/widgets/KeyDetail.h @@ -22,9 +22,9 @@ class KeyDetail: public XcaDetail, public Ui::KeyDetail public: KeyDetail(QWidget *w = nullptr); - void setKey(pki_key *key); + void setKey(pki_key *key, bool import = true); void setupFingerprints(pki_key *key); - static void showKey(QWidget *parent, pki_key *keyi, bool ro = false); + static void showKey(QWidget *parent, pki_key *key, bool import = true); public slots: void itemChanged(pki_base *pki) override;