This commit is contained in:
serg@serg.mylan 2005-05-19 15:20:10 +02:00
commit 23a59c9857
5 changed files with 293 additions and 4 deletions

View file

@ -192,6 +192,54 @@ public:
friend class error_list;
friend class error_list_iterator;
#ifdef LIST_EXTRA_DEBUG
/*
Check list invariants and print results into trace. Invariants are:
- (*last) points to end_of_list
- There are no NULLs in the list.
- base_list::elements is the number of elements in the list.
SYNOPSIS
check_list()
name Name to print to trace file
RETURN
1 The list is Ok.
0 List invariants are not met.
*/
bool check_list(const char *name)
{
base_list *list= this;
list_node *node= first;
uint cnt= 0;
while (node->next != &end_of_list)
{
if (!node->info)
{
DBUG_PRINT("list_invariants",("%s: error: NULL element in the list",
name));
return FALSE;
}
node= node->next;
cnt++;
}
if (last != &(node->next))
{
DBUG_PRINT("list_invariants", ("%s: error: wrong last pointer", name));
return FALSE;
}
if (cnt+1 != elements)
{
DBUG_PRINT("list_invariants", ("%s: error: wrong element count", name));
return FALSE;
}
DBUG_PRINT("list_invariants", ("%s: list is ok", name));
return TRUE;
}
#endif // LIST_EXTRA_DEBUG
protected:
void after(void *info,list_node *node)
{

View file

@ -194,7 +194,9 @@ void udf_init()
This is done to ensure that only approved dll from the system
directories are used (to make this even remotely secure).
*/
if (strchr(dl_name, '/') || name.length > NAME_LEN)
if (strchr(dl_name, '/') ||
IF_WIN(strchr(dl_name, '\\'),0) ||
strlen(name.str) > NAME_LEN)
{
sql_print_error("Invalid row in mysql.func table for function '%.64s'",
name.str);
@ -223,7 +225,7 @@ void udf_init()
}
tmp->dlhandle = dl;
{
char buf[MAX_FIELD_NAME+16], *missing;
char buf[NAME_LEN+16], *missing;
if ((missing= init_syms(tmp, buf)))
{
sql_print_error(ER(ER_CANT_FIND_DL_ENTRY), missing);
@ -410,7 +412,7 @@ int mysql_create_function(THD *thd,udf_func *udf)
This is done to ensure that only approved dll from the system
directories are used (to make this even remotely secure).
*/
if (strchr(udf->dl, '/'))
if (strchr(udf->dl, '/') || IF_WIN(strchr(dl_name, '\\'),0))
{
my_message(ER_UDF_NO_PATHS, ER(ER_UDF_NO_PATHS), MYF(0));
DBUG_RETURN(1);
@ -441,7 +443,7 @@ int mysql_create_function(THD *thd,udf_func *udf)
}
udf->dlhandle=dl;
{
char buf[MAX_FIELD_NAME+16], *missing;
char buf[NAME_LEN+16], *missing;
if ((missing= init_syms(udf, buf)))
{
my_error(ER_CANT_FIND_DL_ENTRY, MYF(0), missing);

View file

@ -27,6 +27,7 @@
#define USES_TYPES
#include "mysql_priv.h"
#include <m_ctype.h>
#include <assert.h>
#define FCOMP 17 /* Bytes for a packed field */