ACK. Fine, whatever makes the analyzers happy.

Arne

Am 21.10.15 um 10:08 schrieb Steffan Karger:
> The code behind our ASSERT() macro is pretty complex.  Although it seems
> to be correct, make it trivially clear we will never return from a failed
> assert by adding an _exit(1) call.  As was suggested by Sebastian Krahmer
> of the SuSE security team.
>
> To make sure they that tools like clang static analyzer and coverity
> understand that assert_failed() will not return, add an
> __attribute__((__noreturn__)) annotation.
>
> v2: use __attribute__ instead of inline to convince static analysers.
>
> Signed-off-by: Steffan Karger <stef...@karger.me>
> ---
>  src/openvpn/error.c | 1 +
>  src/openvpn/error.h | 2 +-
>  2 files changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/src/openvpn/error.c b/src/openvpn/error.c
> index 77b6cec..66f37f3 100644
> --- a/src/openvpn/error.c
> +++ b/src/openvpn/error.c
> @@ -397,6 +397,7 @@ void
>  assert_failed (const char *filename, int line)
>  {
>    msg (M_FATAL, "Assertion failed at %s:%d", filename, line);
> +  _exit(1);
>  }
>  
>  /*
> diff --git a/src/openvpn/error.h b/src/openvpn/error.h
> index d5204f3..4d33843 100644
> --- a/src/openvpn/error.h
> +++ b/src/openvpn/error.h
> @@ -210,7 +210,7 @@ FILE *msg_fp(const unsigned int flags);
>  /* Fatal logic errors */
>  #define ASSERT(x) do { if (!(x)) assert_failed(__FILE__, __LINE__); } while 
> (false)
>  
> -void assert_failed (const char *filename, int line);
> +void assert_failed (const char *filename, int line) 
> __attribute__((__noreturn__));
>  
>  #ifdef ENABLE_DEBUG
>  void crash (void); /* force a segfault (debugging only) */


Reply via email to