Author: Leland Lucius <github@homerow.net>
    Date:   Wed Oct 2 10:17:00 2019 -0500

        Possible fix for bug #590

        This change reduces the risk of LADSPA plugins referencing
        Audacity symbols by using the RTLD_DEEPBIND flag when loading
        the plugins.

        It also addresses an issue specific to the "blop" plugins where
        they load their own libraries (without RTLD_DEEPBIND).

        A much better solution would be to change Audacity's default
        symbol visibility to "hidden" which would expose ONLY symbols
        specificially marked as visible.
This commit is contained in:
Leland Lucius 2019-12-15 23:24:59 -06:00
parent 1f27ad932c
commit cb810e8652
3 changed files with 7 additions and 7 deletions

View File

@ -18,7 +18,7 @@
#define HASHELEM(p) ((p).symbol_name)
#define HASHVAL 50
#define HASHENTRIES 50
#define HASHENTER lookup
#define HASHENTER hash_lookup
#define HASHNOCOPY
#include "hashrout.h"
@ -26,7 +26,7 @@
void defvar(char *name, int *addr)
{
intptr_t i = lookup(name);
intptr_t i = hash_lookup(name);
HASHENTRY(i).symb_type = var_symb_type;
HASHENTRY(i).ptr.intptr = addr;
}
@ -34,7 +34,7 @@ void defvar(char *name, int *addr)
void defun(char *name, seq_cmd_fn addr)
{
intptr_t i = lookup(name);
intptr_t i = hash_lookup(name);
HASHENTRY(i).symb_type = fn_symb_type;
HASHENTRY(i).ptr.routine = addr;
}
@ -42,7 +42,7 @@ void defun(char *name, seq_cmd_fn addr)
void defvec(char *name, int *addr, int size)
{
intptr_t i = lookup(name);
intptr_t i = hash_lookup(name);
HASHENTRY(i).symb_type = vec_symb_type;
HASHENTRY(i).size = size;
HASHENTRY(i).ptr.intptr = addr;

View File

@ -25,7 +25,7 @@ typedef struct symb_descr {
} ptr;
} symb_descr_node;
intptr_t lookup(char *s);
intptr_t hash_lookup(char *s);
void defvar(char *name, int *addr);
void defvec(char *name, int *addr, int size);
/* former defun_type replaced by seq_cmd_fn */

View File

@ -464,7 +464,7 @@ private void docall(void)
if (fieldx == 1) fferror("Routine name expected");
else if (token[fieldx] != '(') fferror("Open paren expected");
else {
desc = &HASHENTRY(lookup(symbol));
desc = &HASHENTRY(hash_lookup(symbol));
if (!desc->symb_type) {
fieldx = 0;
fferror("Function not defined");
@ -1030,7 +1030,7 @@ private void doset(boolean vec_flag)
linex += scan();
if (!token[0]) fferror("Variable name expected");
else {
struct symb_descr *desc = &HASHENTRY(lookup(token));
struct symb_descr *desc = &HASHENTRY(hash_lookup(token));
if (!desc->symb_type) fferror("Called function not defined");
else if (vec_flag && (desc->symb_type != vec_symb_type)) {
fferror("This is not an array");