summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSlávek Banko <slavek.banko@axis.cz>2021-10-29 03:47:53 +0200
committerSlávek Banko <slavek.banko@axis.cz>2021-10-29 03:47:53 +0200
commita08c6ac9e3c8ac162ce08b730fd6108e2f71213c (patch)
tree842abfbe689363ffb623bfba5c9cce742fa7ceb0
parent260c019dc2e15be0618067a8c1c9f7b4b9340526 (diff)
downloadbasket-a08c6ac9.tar.gz
basket-a08c6ac9.zip
Prevent null pointer deference in methods for selection.
This resolves the crash when exporting the Basket archive. Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
-rw-r--r--src/archive.cpp3
-rw-r--r--src/basket.cpp12
2 files changed, 14 insertions, 1 deletions
diff --git a/src/archive.cpp b/src/archive.cpp
index 3f3377c..aec789f 100644
--- a/src/archive.cpp
+++ b/src/archive.cpp
@@ -228,7 +228,8 @@ void Archive::saveBasketToArchive(Basket *basket, bool recursive, KTar *tar, TQS
// Recursively save child baskets:
BasketListViewItem *item = Global::bnpView->listViewItemForBasket(basket);
- if (recursive && item->firstChild()) {
+ if (recursive && item && item->firstChild())
+ {
for (BasketListViewItem *child = (BasketListViewItem*) item->firstChild(); child; child = (BasketListViewItem*) child->nextSibling()) {
saveBasketToArchive(child->basket(), recursive, tar, backgrounds, tempFolder, progress);
}
diff --git a/src/basket.cpp b/src/basket.cpp
index 6e14c65..128c1cb 100644
--- a/src/basket.cpp
+++ b/src/basket.cpp
@@ -4469,12 +4469,20 @@ void Basket::noteUngroup()
void Basket::unplugSelection(NoteSelection *selection)
{
+ if (!selection)
+ {
+ return;
+ }
for (NoteSelection *toUnplug = selection->firstStacked(); toUnplug; toUnplug = toUnplug->nextStacked())
unplugNote(toUnplug->note);
}
void Basket::insertSelection(NoteSelection *selection, Note *after)
{
+ if (!selection)
+ {
+ return;
+ }
for (NoteSelection *toUnplug = selection->firstStacked(); toUnplug; toUnplug = toUnplug->nextStacked()) {
if (toUnplug->note->isGroup()) {
Note *group = new Note(this);
@@ -4496,6 +4504,10 @@ void Basket::insertSelection(NoteSelection *selection, Note *after)
void Basket::selectSelection(NoteSelection *selection)
{
+ if (!selection)
+ {
+ return;
+ }
for (NoteSelection *toUnplug = selection->firstStacked(); toUnplug; toUnplug = toUnplug->nextStacked()) {
if (toUnplug->note->isGroup())
selectSelection(toUnplug);