summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2020-10-05 18:27:55 +0200
committercgzones <cgzones@googlemail.com>2020-10-06 11:17:23 +0200
commitad3acfc847e9d54f07a0684c19181d5f4c28fee4 (patch)
tree7c014fd06e703281003b2277f700e867a7512af4
parente9fa290019ad16e7909555e39830dd226115dfaf (diff)
Handle Panel_getSelected() returning NULL
Found by compiling with LTO: ColumnsPanel.c: In function ‘ColumnsPanel_eventHandler’: ColumnsPanel.c:46:59: error: potential null pointer dereference [-Werror=null-dereference] 46 | ((ListItem*)Panel_getSelected(super))->moving = this->moving; | ^ AvailableColumnsPanel.c: In function ‘AvailableColumnsPanel_eventHandler’: AvailableColumnsPanel.c:31:8: error: potential null pointer dereference [-Werror=null-dereference] 31 | int key = ((ListItem*) Panel_getSelected(super))->key; | ^ AvailableMetersPanel.c: In function ‘AvailableMetersPanel_eventHandler’: AvailableMetersPanel.c:40:24: error: potential null pointer dereference [-Werror=null-dereference] 40 | int param = selected->key & 0xff; | ^ linux/IOPriorityPanel.c: In function ‘IOPriorityPanel_getIOPriority’: linux/IOPriorityPanel.c:37:11: error: potential null pointer dereference [-Werror=null-dereference] 37 | return (IOPriority) ( ((ListItem*) Panel_getSelected(this))->key ); | ^
-rw-r--r--AvailableColumnsPanel.c6
-rw-r--r--AvailableMetersPanel.c5
-rw-r--r--ColumnsPanel.c4
-rw-r--r--linux/IOPriorityPanel.c3
4 files changed, 14 insertions, 4 deletions
diff --git a/AvailableColumnsPanel.c b/AvailableColumnsPanel.c
index e605ae52..fd247af0 100644
--- a/AvailableColumnsPanel.c
+++ b/AvailableColumnsPanel.c
@@ -28,7 +28,6 @@ static void AvailableColumnsPanel_delete(Object* object) {
static HandlerResult AvailableColumnsPanel_eventHandler(Panel* super, int ch) {
AvailableColumnsPanel* this = (AvailableColumnsPanel*) super;
- int key = ((ListItem*) Panel_getSelected(super))->key;
HandlerResult result = IGNORED;
switch(ch) {
@@ -36,6 +35,11 @@ static HandlerResult AvailableColumnsPanel_eventHandler(Panel* super, int ch) {
case KEY_ENTER:
case KEY_F(5):
{
+ const ListItem* selected = (ListItem*) Panel_getSelected(super);
+ if (!selected)
+ break;
+
+ int key = selected->key;
int at = Panel_getSelectedIndex(this->columns);
Panel_insert(this->columns, at, (Object*) ListItem_new(Process_fields[key].name, key));
Panel_setSelected(this->columns, at+1);
diff --git a/AvailableMetersPanel.c b/AvailableMetersPanel.c
index 604a6891..f5e59218 100644
--- a/AvailableMetersPanel.c
+++ b/AvailableMetersPanel.c
@@ -36,7 +36,10 @@ static HandlerResult AvailableMetersPanel_eventHandler(Panel* super, int ch) {
AvailableMetersPanel* this = (AvailableMetersPanel*) super;
Header* header = this->header;
- ListItem* selected = (ListItem*) Panel_getSelected(super);
+ const ListItem* selected = (ListItem*) Panel_getSelected(super);
+ if (!selected)
+ return IGNORED;
+
int param = selected->key & 0xff;
int type = selected->key >> 16;
HandlerResult result = IGNORED;
diff --git a/ColumnsPanel.c b/ColumnsPanel.c
index d7132e18..8328d15e 100644
--- a/ColumnsPanel.c
+++ b/ColumnsPanel.c
@@ -43,7 +43,9 @@ static HandlerResult ColumnsPanel_eventHandler(Panel* super, int ch) {
if (selected < size - 1) {
this->moving = !(this->moving);
Panel_setSelectionColor(super, this->moving ? CRT_colors[PANEL_SELECTION_FOLLOW] : CRT_colors[PANEL_SELECTION_FOCUS]);
- ((ListItem*)Panel_getSelected(super))->moving = this->moving;
+ ListItem* selectedItem = (ListItem*) Panel_getSelected(super);
+ if (selectedItem)
+ selectedItem->moving = this->moving;
result = HANDLED;
}
break;
diff --git a/linux/IOPriorityPanel.c b/linux/IOPriorityPanel.c
index b3b1a37b..a12b8065 100644
--- a/linux/IOPriorityPanel.c
+++ b/linux/IOPriorityPanel.c
@@ -34,5 +34,6 @@ Panel* IOPriorityPanel_new(IOPriority currPrio) {
}
IOPriority IOPriorityPanel_getIOPriority(Panel* this) {
- return (IOPriority) ( ((ListItem*) Panel_getSelected(this))->key );
+ const ListItem* selected = (ListItem*) Panel_getSelected(this);
+ return selected ? selected->key : IOPriority_None;
}

© 2014-2024 Faster IT GmbH | imprint | privacy policy