From 75dd467dc5f85b66c00a6e6bc8fe177395a0a074 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Wed, 21 Sep 2022 15:11:10 +0200 Subject: Update with changes from source (commit bcb1d791) - cont'd. --- libdecor/src/libdecor.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'libdecor/src/libdecor.c') diff --git a/libdecor/src/libdecor.c b/libdecor/src/libdecor.c index 9bd418fe2..7d48d1427 100644 --- a/libdecor/src/libdecor.c +++ b/libdecor/src/libdecor.c @@ -1,6 +1,7 @@ /* * Copyright © 2017-2018 Red Hat Inc. * Copyright © 2018 Jonas Ådahl + * Copyright © 2019 Christian Rauch * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the @@ -1387,6 +1388,24 @@ calculate_priority(const struct libdecor_plugin_description *plugin_description) return -1; } +static bool +check_symbol_conflicts(const struct libdecor_plugin_description *plugin_description) +{ + char * const *symbol; + + symbol = plugin_description->conflicting_symbols; + while (*symbol) { + dlerror(); + dlsym (RTLD_DEFAULT, *symbol); + if (!dlerror()) + return false; + + symbol++; + } + + return true; +} + static struct plugin_loader * load_plugin_loader(struct libdecor *context, const char *path, @@ -1438,6 +1457,11 @@ load_plugin_loader(struct libdecor *context, return NULL; } + if (!check_symbol_conflicts(plugin_description)) { + dlclose(lib); + return NULL; + } + priority = calculate_priority(plugin_description); if (priority == -1) { fprintf(stderr, -- cgit v1.2.3