]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
inputs may be NULL
authorAlan T. DeKok <aland@freeradius.org>
Fri, 25 Mar 2022 21:06:18 +0000 (17:06 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 26 Mar 2022 01:52:06 +0000 (21:52 -0400)
src/lib/util/tlist.h

index d7e4856d825caa1cfb12e0c67c50a863defe8147..29e1cca9c475f81401a156186dde1d3622f8eb18 100644 (file)
@@ -344,8 +344,10 @@ static inline CC_HINT(nonnull) void *fr_tlist_head(fr_tlist_head_t const *list_h
  *     - True if it does not.
  *     - False if it does.
  */
-static inline CC_HINT(nonnull) bool fr_tlist_empty(fr_tlist_head_t const *list_head)
+static inline bool fr_tlist_empty(fr_tlist_head_t const *list_head)
 {
+       if (!list_head) return true;
+
        return fr_dlist_empty(&list_head->dlist_head);
 }
 
@@ -394,9 +396,12 @@ static inline CC_HINT(nonnull) void *fr_tlist_tail(fr_tlist_head_t const *list_h
  */
 static inline CC_HINT(nonnull(1)) void *fr_tlist_next(fr_tlist_head_t const *list_head, void const *ptr)
 {
-       fr_tlist_t *entry = fr_tlist_item_to_entry(list_head->offset, ptr);
+       fr_tlist_t *entry;
        fr_tlist_t *next;
 
+       if (!ptr) return fr_tlist_head(list_head);
+
+       entry = fr_tlist_item_to_entry(list_head->offset, ptr);
        next = fr_dlist_next(&list_head->dlist_head, entry);
        if (!next) return NULL;
 
@@ -418,9 +423,12 @@ static inline CC_HINT(nonnull(1)) void *fr_tlist_next(fr_tlist_head_t const *lis
  */
 static inline CC_HINT(nonnull(1)) void *fr_tlist_prev(fr_tlist_head_t const *list_head, void const *ptr)
 {
-       fr_tlist_t *entry = fr_tlist_item_to_entry(list_head->offset, ptr);
+       fr_tlist_t *entry;
        fr_tlist_t *prev;
 
+       if (!ptr) return fr_tlist_tail(list_head);
+
+       entry = fr_tlist_item_to_entry(list_head->offset, ptr);
        prev = fr_dlist_prev(&list_head->dlist_head, entry);
        if (!prev) return NULL;