From: Arran Cudbard-Bell Date: Sat, 20 Jan 2018 01:10:06 +0000 (-0700) Subject: Be forgiving when calling access functions on NULL cursors X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a052430823213d2d737961bbae99a32644eb7ea3;p=thirdparty%2Ffreeradius-server.git Be forgiving when calling access functions on NULL cursors --- diff --git a/src/include/cursor.h b/src/include/cursor.h index 5f836600626..87fd8fb218f 100644 --- a/src/include/cursor.h +++ b/src/include/cursor.h @@ -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); diff --git a/src/lib/util/cursor.c b/src/lib/util/cursor.c index 7c5c9eb2ec8..278a16ea28d 100644 --- a/src/lib/util/cursor.c +++ b/src/lib/util/cursor.c @@ -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; }