From 2e1ac8a3f2173a848637101b61397a847d20c195 Mon Sep 17 00:00:00 2001 From: Timo Pollmeier Date: Wed, 27 Aug 2025 16:08:23 +0200 Subject: [PATCH] Fix: handle 0 ports case in get_port_lists filter The SQL for getting the port counts is adjusted to correctly handle the cases where there are no TCP, UDP or any ports. Without this fix, sorting using the "tcp", "udp" or "total" filter column would return port lists with no ports of the selected type in the wrong order. --- src/manage_sql_port_lists.c | 52 +++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/src/manage_sql_port_lists.c b/src/manage_sql_port_lists.c index bd6228f660..b55d3b348d 100644 --- a/src/manage_sql_port_lists.c +++ b/src/manage_sql_port_lists.c @@ -1826,39 +1826,45 @@ delete_port_range (const char *port_range_id, int dummy) GET_ITERATOR_COLUMNS (port_lists), \ { \ /* COUNT ALL ports */ \ - "(SELECT" \ - " sum ((CASE" \ - " WHEN \"end\" IS NULL THEN start ELSE \"end\"" \ - " END)" \ - " - start" \ - " + 1)" \ - " FROM port_ranges WHERE port_list = port_lists.id)", \ + "coalesce (" \ + " (SELECT" \ + " sum ((CASE" \ + " WHEN \"end\" IS NULL THEN start ELSE \"end\"" \ + " END)" \ + " - start" \ + " + 1)" \ + " FROM port_ranges WHERE port_list = port_lists.id)," \ + " 0)", \ "total", \ KEYWORD_TYPE_INTEGER \ }, \ { \ /* COUNT TCP ports */ \ - "(SELECT" \ - " sum ((CASE" \ - " WHEN \"end\" IS NULL THEN start ELSE \"end\"" \ - " END)" \ - " - start" \ - " + 1)" \ - " FROM port_ranges WHERE port_list = port_lists.id" \ - " AND type = 0)", \ + "coalesce (" \ + " (SELECT" \ + " sum ((CASE" \ + " WHEN \"end\" IS NULL THEN start ELSE \"end\"" \ + " END)" \ + " - start" \ + " + 1)" \ + " FROM port_ranges WHERE port_list = port_lists.id" \ + " AND type = 0)," \ + " 0)", \ "tcp", \ KEYWORD_TYPE_INTEGER \ }, \ { \ /* COUNT UDP ports */ \ - "(SELECT" \ - " sum ((CASE" \ - " WHEN \"end\" IS NULL THEN start ELSE \"end\"" \ - " END)" \ - " - start" \ - " + 1)" \ - " FROM port_ranges WHERE port_list = port_lists.id" \ - " AND type = 1)", \ + "coalesce(" \ + " (SELECT" \ + " sum ((CASE" \ + " WHEN \"end\" IS NULL THEN start ELSE \"end\"" \ + " END)" \ + " - start" \ + " + 1)" \ + " FROM port_ranges WHERE port_list = port_lists.id" \ + " AND type = 1)," \ + " 0)", \ "udp", \ KEYWORD_TYPE_INTEGER \ }, \