Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • G girara
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 5
    • Issues 5
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 3
    • Merge requests 3
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • pwmtpwmt
  • girara
  • Issues
  • #2
Closed
Open
Issue created May 01, 2018 by Robin Krahl@robin.krahl

Allow empty lists in girara_list_foreach

Currently, girara_list_foreach asserts that the list is not empty (list->start in datastructures.c:382). Yet a for-each operation on an empty list should just do nothing, not cause a critical error. (Similar to the GIRARA_LIST_FOREACH macro, which allows an empty list.)

For example, zathura commit 5baa31b83d8c5fe5767394bbbd3084eff55bc5f4 introduces a call to girara_list_foreach with a possibly empty list in plain_save_jumplist, causing a failed assertion every time a file is closed.

Suggested fix:

diff --git a/girara/datastructures.c b/girara/datastructures.c
index fc21330..78e6659 100644
--- a/girara/datastructures.c
+++ b/girara/datastructures.c
@@ -379,9 +379,10 @@ girara_list_sort(girara_list_t* list, girara_compare_function_t compare)
 void
 girara_list_foreach(girara_list_t* list, girara_list_callback_t callback, void* data)
 {
-  g_return_if_fail(list && list->start && callback);
+  g_return_if_fail(list && callback);

-  g_list_foreach(list->start, callback, data);
+  if (list->start)
+    g_list_foreach(list->start, callback, data);
 }

 static void
Assignee
Assign to
Time tracking