summaryrefslogtreecommitdiffstats
path: root/libraries/jansson/0001-Enable-Bsymbolic-functions-linker-flag-whenever-poss.patch
blob: 509a28c3fbe4e285e870c5064bb10e56d579717f (plain)
From c14f07092f76b5bc4098cee528122bd0d418e10e Mon Sep 17 00:00:00 2001
Message-Id: <c14f07092f76b5bc4098cee528122bd0d418e10e.1533366596.git.mprivozn@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Sat, 4 Aug 2018 08:58:26 +0200
Subject: [PATCH] Enable -Bsymbolic-functions linker flag whenever possible

It was discovered fairly recently that JSON parsing libraries use
common pattern to name their exported symbols (they all use
json_ prefix). So eventually it happens that two symbols from two
different libraries have the same name. This will lead to cryptic
crashes (see [1] and [2]). Linking with -Bsymbolic-functions
prevents this.

1: https://gitlab.gnome.org/GNOME/json-glib/issues/33
2: https://groups.google.com/forum/#!topic/jansson-users/7Efx-RI45IU

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
 configure.ac    | 29 +++++++++++++++++++++++++++++
 src/Makefile.am |  3 ++-
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index ca12b59..735fe89 100644
--- a/configure.ac
+++ b/configure.ac
@@ -107,6 +107,35 @@ AC_ARG_ENABLE([initial-hashtable-order],
 AC_DEFINE_UNQUOTED([INITIAL_HASHTABLE_ORDER], [$initial_hashtable_order],
   [Number of buckets new object hashtables contain is 2 raised to this power. E.g. 3 -> 2^3 = 8.])
 
+AC_ARG_ENABLE([Bsymbolic],
+  [AS_HELP_STRING([--disable-Bsymbolic],
+    [Avoid linking with -Bsymbolic-function])],
+  [], [with_Bsymbolic=check])
+
+if test "x$with_Bsymbolic" != "xno" ; then
+    AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
+    saved_LDFLAGS="${LDFLAGS}"
+    LDFLAGS=-Wl,-Bsymbolic-functions
+    AC_TRY_LINK(
+      [], [int main (void) { return 0; }],
+      [AC_MSG_RESULT([yes])
+       have_Bsymbolic=yes],
+      [AC_MSG_RESULT([no])
+       have_Bsymbolic=no]
+    )
+    LDFLAGS="${saved_LDFLAGS}"
+
+    if test "x$with_Bsymbolic" = "xcheck" ; then
+        with_Bsymbolic=$have_Bsymbolic;
+    fi
+    if test "x$with_Bsymbolic:x$have_Bsymbolic" = "xyes:xno" ; then
+        AC_MSG_ERROR([linker support is required for -Bsymbolic])
+    fi
+fi
+
+AS_IF([test "x$with_Bsymbolic" = "xyes"], [JSON_BSYMBOLIC_LDFLAGS=-Wl[,]-Bsymbolic-functions])
+AC_SUBST(JSON_BSYMBOLIC_LDFLAGS)
+
 if test x$GCC = xyes; then
     AC_MSG_CHECKING(for -Wno-format-truncation)
     wnoformat_truncation="-Wno-format-truncation"
diff --git a/src/Makefile.am b/src/Makefile.am
index f823195..63ff7c1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -24,4 +24,5 @@ libjansson_la_SOURCES = \
 libjansson_la_LDFLAGS = \
 	-no-undefined \
 	-export-symbols-regex '^json_' \
-	-version-info 15:0:11
+	-version-info 15:0:11 \
+	@JSON_BSYMBOLIC_LDFLAGS@
-- 
2.16.4