From 0283a93cb8e00114a29e630b4ff7867a819d5bd5 Mon Sep 17 00:00:00 2001 From: Mark Hindley Date: Fri, 9 Nov 2018 12:51:53 +0000 Subject: Refreshed patch to match upstream fix for issue #92. --- debian/changelog | 4 ++ ...bc_program_invocation_name_pointer_overlap.diff | 63 ++++++++++------------ 2 files changed, 31 insertions(+), 36 deletions(-) (limited to 'debian') diff --git a/debian/changelog b/debian/changelog index cbd0dfb14..19aa5f55f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,7 @@ + * Update fix for SIGABRT to upstream #92. + + -- + elogind (239.1-1~rc1) unstable; urgency=medium * New upstream release v239.1. diff --git a/debian/patches/Fix_glibc_program_invocation_name_pointer_overlap.diff b/debian/patches/Fix_glibc_program_invocation_name_pointer_overlap.diff index 5f1868272..034bf292b 100644 --- a/debian/patches/Fix_glibc_program_invocation_name_pointer_overlap.diff +++ b/debian/patches/Fix_glibc_program_invocation_name_pointer_overlap.diff @@ -3,44 +3,35 @@ Bug: https://github.com/elogind/elogind/issues/92 --- a/src/shared/musl_missing.c +++ b/src/shared/musl_missing.c -@@ -34,9 +34,14 @@ +@@ -26,14 +26,14 @@ + #if HAVE_PROGRAM_INVOCATION_NAME == 0 + char *program_invocation_name = NULL; + char *program_invocation_short_name = NULL; +-#endif // libc does not provide these variables - static void elogind_free_program_name(void) { +-const char *program_arg_name = NULL; ++const char *program_arg_name = NULL; /* Helper */ ++#endif // libc does not provide program_invocation_[short_]name + + #include "musl_missing.h" -- if (program_invocation_name && (program_invocation_name != program_arg_name) && strlen(program_invocation_name)) -+ if (program_invocation_name && -+ (program_invocation_name != program_arg_name) && -+ strlen(program_invocation_name)) ++#if HAVE_PROGRAM_INVOCATION_NAME == 0 + static void elogind_free_program_name(void) { +- + if (program_invocation_name && (program_invocation_name != program_arg_name) && strlen(program_invocation_name)) program_invocation_name = mfree(program_invocation_name); -- if (program_invocation_short_name && (program_invocation_short_name != program_arg_name) && strlen(program_invocation_short_name)) -+ if (program_invocation_short_name && -+ (program_invocation_short_name != program_arg_name) && -+ (program_invocation_short_name + strlen(program_invocation_short_name) != program_invocation_name + strlen(program_invocation_name)) -+ && strlen(program_invocation_short_name)) - program_invocation_short_name = mfree(program_invocation_short_name); + if (program_invocation_short_name && (program_invocation_short_name != program_arg_name) && strlen(program_invocation_short_name)) +@@ -55,8 +55,11 @@ + program_invocation_name = strdup(program_arg_name); + if (NULL == program_invocation_short_name) + program_invocation_short_name = strdup(basename(program_arg_name)); +-#if HAVE_PROGRAM_INVOCATION_NAME == 0 + atexit(elogind_free_program_name); +-#endif // libc does not provide these variables } ++#else ++void elogind_set_program_name(const char* pcall) { ++ assert(pcall && pcall[0]); ++} ++#endif // libc does not provide program_invocation_[short_]name ---- a/src/basic/process-util.c -+++ b/src/basic/process-util.c -@@ -10,6 +10,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -306,8 +307,12 @@ - - k = strlen(program_invocation_name); - strncpy(program_invocation_name, name, k); -- if (l > k) -+ if (l > k) { - truncated = true; -+ program_invocation_short_name = NULL; -+ } -+ else -+ program_invocation_short_name = program_invocation_name + strlen(dirname(program_invocation_name)) -1; - } - - /* Third step, completely replace the argv[] array the kernel maintains for us. This requires privileges, but -- cgit v1.2.3