diff options
author | unknown <serg@serg.mylan> | 2005-05-19 15:20:10 +0200 |
---|---|---|
committer | unknown <serg@serg.mylan> | 2005-05-19 15:20:10 +0200 |
commit | 185b5e406740fbc0f1ea78f5ec82e95ccbefc382 (patch) | |
tree | da2c7aa4f986716b622d061f3949dc2c92a1df20 /sql | |
parent | f87f045065197aa036ebf023cd8a6da76e23e013 (diff) | |
parent | 27378545f9d9265e4dc9bec00e560f717457a8e7 (diff) | |
download | mariadb-git-185b5e406740fbc0f1ea78f5ec82e95ccbefc382.tar.gz |
merged
sql/sql_udf.cc:
Auto merged
sql/unireg.cc:
Auto merged
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_list.h | 48 | ||||
-rw-r--r-- | sql/sql_udf.cc | 10 | ||||
-rw-r--r-- | sql/unireg.cc | 1 |
3 files changed, 55 insertions, 4 deletions
diff --git a/sql/sql_list.h b/sql/sql_list.h index ac0f7f7012a..09c01931c38 100644 --- a/sql/sql_list.h +++ b/sql/sql_list.h @@ -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) { diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc index f5d64efb5e9..ebd753da9cf 100644 --- a/sql/sql_udf.cc +++ b/sql/sql_udf.cc @@ -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); diff --git a/sql/unireg.cc b/sql/unireg.cc index da463885f85..57d9fd07e51 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -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 */ |