malloc: Simplify implementation of __malloc_assert

It is prudent not to run too much code after detecting heap
corruption, and __fxprintf is really complex.  The line number
and file name do not carry much information, so it is not included
in the error message.  (__libc_message only supports %s formatting.)
The function name and assertion should provide some context.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
This commit is contained in:
Florian Weimer 2022-07-21 12:12:08 +02:00
parent 8b84fb862c
commit ac8047cdf3

View File

@ -292,19 +292,14 @@
# define __assert_fail(assertion, file, line, function) \ # define __assert_fail(assertion, file, line, function) \
__malloc_assert(assertion, file, line, function) __malloc_assert(assertion, file, line, function)
extern const char *__progname; _Noreturn static void
static void
__malloc_assert (const char *assertion, const char *file, unsigned int line, __malloc_assert (const char *assertion, const char *file, unsigned int line,
const char *function) const char *function)
{ {
(void) __fxprintf (NULL, "%s%s%s:%u: %s%sAssertion `%s' failed.\n", __libc_message (do_abort, "\
__progname, __progname[0] ? ": " : "", Fatal glibc error: malloc assertion failure in %s: %s\n",
file, line, function, assertion);
function ? function : "", function ? ": " : "", __builtin_unreachable ();
assertion);
fflush (stderr);
abort ();
} }
#endif #endif
#endif #endif