mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-24 22:30:21 +01:00
Reapply 5955dbc752
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:
@@ -14,7 +14,7 @@
|
|||||||
#define HASHELEM(p) ((p).symbol_name)
|
#define HASHELEM(p) ((p).symbol_name)
|
||||||
#define HASHVAL 50
|
#define HASHVAL 50
|
||||||
#define HASHENTRIES 50
|
#define HASHENTRIES 50
|
||||||
#define HASHENTER lookup
|
#define HASHENTER hash_lookup
|
||||||
#define HASHNOCOPY
|
#define HASHNOCOPY
|
||||||
|
|
||||||
#include "hashrout.h"
|
#include "hashrout.h"
|
||||||
@@ -23,7 +23,7 @@ void defvar(name, addr)
|
|||||||
char *name;
|
char *name;
|
||||||
int *addr;
|
int *addr;
|
||||||
{
|
{
|
||||||
int i = lookup(name);
|
int i = hash_lookup(name);
|
||||||
HASHENTRY(i).symb_type = var_symb_type;
|
HASHENTRY(i).symb_type = var_symb_type;
|
||||||
HASHENTRY(i).ptr.intptr = addr;
|
HASHENTRY(i).ptr.intptr = addr;
|
||||||
}
|
}
|
||||||
@@ -33,7 +33,7 @@ void defun(name, addr)
|
|||||||
char *name;
|
char *name;
|
||||||
int (*addr)();
|
int (*addr)();
|
||||||
{
|
{
|
||||||
int i = lookup(name);
|
int i = hash_lookup(name);
|
||||||
HASHENTRY(i).symb_type = fn_symb_type;
|
HASHENTRY(i).symb_type = fn_symb_type;
|
||||||
HASHENTRY(i).ptr.routine = addr;
|
HASHENTRY(i).ptr.routine = addr;
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ void defvec(name, addr, size)
|
|||||||
int *addr;
|
int *addr;
|
||||||
int size;
|
int size;
|
||||||
{
|
{
|
||||||
int i = lookup(name);
|
int i = hash_lookup(name);
|
||||||
HASHENTRY(i).symb_type = vec_symb_type;
|
HASHENTRY(i).symb_type = vec_symb_type;
|
||||||
HASHENTRY(i).size = size;
|
HASHENTRY(i).size = size;
|
||||||
HASHENTRY(i).ptr.intptr = addr;
|
HASHENTRY(i).ptr.intptr = addr;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ typedef struct symb_descr {
|
|||||||
} ptr;
|
} ptr;
|
||||||
} symb_descr_node;
|
} symb_descr_node;
|
||||||
|
|
||||||
int lookup(char *s);
|
int hash_lookup(char *s);
|
||||||
void defvar(char *name, int *addr);
|
void defvar(char *name, int *addr);
|
||||||
void defvec(char *name, int *addr, int size);
|
void defvec(char *name, int *addr, int size);
|
||||||
typedef int (*defun_type)();
|
typedef int (*defun_type)();
|
||||||
|
|||||||
@@ -471,7 +471,7 @@ private void docall()
|
|||||||
if (fieldx == 1) fferror("Routine name expected");
|
if (fieldx == 1) fferror("Routine name expected");
|
||||||
else if (token[fieldx] != '(') fferror("Open paren expected");
|
else if (token[fieldx] != '(') fferror("Open paren expected");
|
||||||
else {
|
else {
|
||||||
desc = &HASHENTRY(lookup(symbol));
|
desc = &HASHENTRY(hash_lookup(symbol));
|
||||||
if (!desc->symb_type) {
|
if (!desc->symb_type) {
|
||||||
fieldx = 0;
|
fieldx = 0;
|
||||||
fferror("Function not defined");
|
fferror("Function not defined");
|
||||||
@@ -1038,7 +1038,7 @@ private void doset(vec_flag)
|
|||||||
linex += scan();
|
linex += scan();
|
||||||
if (!token[0]) fferror("Variable name expected");
|
if (!token[0]) fferror("Variable name expected");
|
||||||
else {
|
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");
|
if (!desc->symb_type) fferror("Called function not defined");
|
||||||
else if (vec_flag && (desc->symb_type != vec_symb_type)) {
|
else if (vec_flag && (desc->symb_type != vec_symb_type)) {
|
||||||
fferror("This is not an array");
|
fferror("This is not an array");
|
||||||
|
|||||||
Reference in New Issue
Block a user