]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Be forgiving when calling access functions on NULL cursors
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 20 Jan 2018 01:10:06 +0000 (18:10 -0700)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 20 Jan 2018 01:10:06 +0000 (18:10 -0700)
src/include/cursor.h
src/lib/util/cursor.c

index 5f836600626770a8a8fe84168d8635bab9acc158..87fd8fb218fa1233e80afab9248bda762d1c2051 100644 (file)
@@ -53,19 +53,19 @@ typedef struct fr_cursor_s {
 
 void fr_cursor_copy(fr_cursor_t *out, fr_cursor_t const *in) CC_HINT(nonnull);
 
-void *fr_cursor_head(fr_cursor_t *cursor) CC_HINT(nonnull);
+void *fr_cursor_head(fr_cursor_t *cursor);
 
-void *fr_cursor_tail(fr_cursor_t *cursor) CC_HINT(nonnull);
+void *fr_cursor_tail(fr_cursor_t *cursor);
 
-void *fr_cursor_next(fr_cursor_t *cursor) CC_HINT(nonnull);
+void *fr_cursor_next(fr_cursor_t *cursor);
 
-void *fr_cursor_next_peek(fr_cursor_t *cursor) CC_HINT(nonnull);
+void *fr_cursor_next_peek(fr_cursor_t *cursor);
 
-void *fr_cursor_list_next_peek(fr_cursor_t *cursor) CC_HINT(nonnull);
+void *fr_cursor_list_next_peek(fr_cursor_t *cursor);
 
-void *fr_cursor_list_prev_peek(fr_cursor_t *cursor) CC_HINT(nonnull);
+void *fr_cursor_list_prev_peek(fr_cursor_t *cursor);
 
-void *fr_cursor_current(fr_cursor_t *cursor) CC_HINT(nonnull);
+void *fr_cursor_current(fr_cursor_t *cursor);
 
 void fr_cursor_prepend(fr_cursor_t *cursor, void *v) CC_HINT(nonnull);
 
index 7c5c9eb2ec81213f6b9672292d8cde2fd252c992..278a16ea28df4dead290e16bc73688340c77896a 100644 (file)
@@ -136,6 +136,8 @@ void fr_cursor_copy(fr_cursor_t *out, fr_cursor_t const *in)
  */
 void *fr_cursor_head(fr_cursor_t *cursor)
 {
+       if (!cursor) return NULL;
+
        cursor->current = *cursor->head;
        cursor->prev = NULL;
 
@@ -149,7 +151,7 @@ void *fr_cursor_head(fr_cursor_t *cursor)
  */
 void *fr_cursor_tail(fr_cursor_t *cursor)
 {
-       if (!*cursor->head) return NULL;
+       if (!cursor || !*cursor->head) return NULL;
 
        cursor->current = cursor_tail(&cursor->prev, cursor, cursor->current);
        cursor->tail = cursor->current;                         /* my as well update our insertion tail */
@@ -166,7 +168,7 @@ void *fr_cursor_tail(fr_cursor_t *cursor)
  */
 void * CC_HINT(hot) fr_cursor_next(fr_cursor_t *cursor)
 {
-       if (!*cursor->head) return NULL;
+       if (!cursor || !*cursor->head) return NULL;
 
        cursor->current = cursor_next(&cursor->prev, cursor, cursor->current);
 
@@ -198,7 +200,7 @@ void *fr_cursor_next_peek(fr_cursor_t *cursor)
  */
  void *fr_cursor_list_next_peek(fr_cursor_t *cursor)
 {
-       if (!cursor->current) return NULL;
+       if (!cursor || !cursor->current) return NULL;
 
        return *NEXT_PTR(cursor->current);
 }
@@ -215,6 +217,8 @@ void *fr_cursor_next_peek(fr_cursor_t *cursor)
  */
 void *fr_cursor_list_prev_peek(fr_cursor_t *cursor)
 {
+       if (!cursor) return NULL;
+
        return cursor->prev;
 }
 
@@ -227,6 +231,8 @@ void *fr_cursor_list_prev_peek(fr_cursor_t *cursor)
  */
 void * CC_HINT(hot) fr_cursor_current(fr_cursor_t *cursor)
 {
+       if (!cursor) return NULL;
+
        return cursor->current;
 }