mirror of
https://github.com/MariaDB/server.git
synced 2026-05-06 15:15:34 +02:00
merged
This commit is contained in:
commit
23a59c9857
5 changed files with 293 additions and 4 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue