Update with changes from source (commit bcb1d791) - cont'd.

This commit is contained in:
ManoloFLTK 2022-09-21 15:11:10 +02:00
parent a2bf4d7ef2
commit 75dd467dc5
2 changed files with 28 additions and 0 deletions

View File

@ -1,6 +1,7 @@
/* /*
* Copyright © 2017-2018 Red Hat Inc. * Copyright © 2017-2018 Red Hat Inc.
* Copyright © 2018 Jonas Ådahl * Copyright © 2018 Jonas Ådahl
* Copyright © 2019 Christian Rauch
* *
* Permission is hereby granted, free of charge, to any person obtaining * Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the * a copy of this software and associated documentation files (the
@ -79,6 +80,9 @@ struct libdecor_plugin_description {
/* Vfunc used for constructing a plugin instance. */ /* Vfunc used for constructing a plugin instance. */
libdecor_plugin_constructor constructor; libdecor_plugin_constructor constructor;
/* NULL terminated list of incompatible symbols. */
char *conflicting_symbols[1024];
}; };
struct libdecor_plugin_interface { struct libdecor_plugin_interface {

View File

@ -1,6 +1,7 @@
/* /*
* Copyright © 2017-2018 Red Hat Inc. * Copyright © 2017-2018 Red Hat Inc.
* Copyright © 2018 Jonas Ådahl * Copyright © 2018 Jonas Ådahl
* Copyright © 2019 Christian Rauch
* *
* Permission is hereby granted, free of charge, to any person obtaining * Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the * 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; 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 * static struct plugin_loader *
load_plugin_loader(struct libdecor *context, load_plugin_loader(struct libdecor *context,
const char *path, const char *path,
@ -1438,6 +1457,11 @@ load_plugin_loader(struct libdecor *context,
return NULL; return NULL;
} }
if (!check_symbol_conflicts(plugin_description)) {
dlclose(lib);
return NULL;
}
priority = calculate_priority(plugin_description); priority = calculate_priority(plugin_description);
if (priority == -1) { if (priority == -1) {
fprintf(stderr, fprintf(stderr,