summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <pem@mysql.comhem.se>2005-05-31 18:36:32 +0200
committerunknown <pem@mysql.comhem.se>2005-05-31 18:36:32 +0200
commit3f7b0f708e046d0a5ffe0ef96c1f52471be7b397 (patch)
tree151c51e4a5a263cada0599bd33881110da8caf0b
parent190aafb4d9760976b212db51f2f56c41f16cc376 (diff)
downloadmariadb-git-3f7b0f708e046d0a5ffe0ef96c1f52471be7b397.tar.gz
Fixed BUG#9529: Stored Procedures: No Warning on truncation of procedure name
during creation. Although it returns an error, consistent with the behaviour for other objects. (Unclear why we would allow the creation of SPs with truncated names.) mysql-test/r/sp-error.result: New test case for BUG#9529. mysql-test/t/sp-error.test: New test case for BUG#9529. sql/sp.cc: Check SP name length on creation (and drop). sql/sp.h: New status code for bad (too long) name. sql/sql_parse.cc: New status code for bad (too long) name.
-rw-r--r--mysql-test/r/sp-error.result4
-rw-r--r--mysql-test/t/sp-error.test10
-rw-r--r--sql/sp.cc9
-rw-r--r--sql/sp.h1
-rw-r--r--sql/sql_parse.cc6
5 files changed, 30 insertions, 0 deletions
diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result
index 5eb651e2fca..ccdb46f10d0 100644
--- a/mysql-test/r/sp-error.result
+++ b/mysql-test/r/sp-error.result
@@ -654,4 +654,8 @@ flush tables;
return 5;
end|
ERROR 0A000: FLUSH is not allowed in stored procedures
+create procedure bug9529_90123456789012345678901234567890123456789012345678901234567890()
+begin
+end|
+ERROR 42000: Identifier name 'bug9529_90123456789012345678901234567890123456789012345678901234567890' is too long
drop table t1|
diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test
index 78a6cdd49e1..a2a43110b54 100644
--- a/mysql-test/t/sp-error.test
+++ b/mysql-test/t/sp-error.test
@@ -921,6 +921,16 @@ end|
#
+# BUG#9529: Stored Procedures: No Warning on truncation of procedure name
+# during creation.
+#
+--error ER_TOO_LONG_IDENT
+create procedure bug9529_90123456789012345678901234567890123456789012345678901234567890()
+begin
+end|
+
+
+#
# BUG#NNNN: New bug synopsis
#
#--disable_warnings
diff --git a/sql/sp.cc b/sql/sp.cc
index a5b1f062456..4f89d6ba6da 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -120,6 +120,10 @@ db_find_routine_aux(THD *thd, int type, sp_name *name,
'db', 'name' and 'type' and the first key is the primary key over the
same fields.
*/
+ if (name->m_name.length > table->field[1]->field_length)
+ {
+ DBUG_RETURN(SP_KEY_NOT_FOUND);
+ }
table->field[0]->store(name->m_db.str, name->m_db.length, &my_charset_bin);
table->field[1]->store(name->m_name.str, name->m_name.length,
&my_charset_bin);
@@ -389,6 +393,11 @@ db_create_routine(THD *thd, int type, sp_head *sp)
ret= SP_GET_FIELD_FAILED;
goto done;
}
+ if (sp->m_name.length > table->field[MYSQL_PROC_FIELD_NAME]->field_length)
+ {
+ ret= SP_BAD_IDENTIFIER;
+ goto done;
+ }
table->field[MYSQL_PROC_FIELD_DB]->
store(sp->m_db.str, sp->m_db.length, system_charset_info);
table->field[MYSQL_PROC_FIELD_NAME]->
diff --git a/sql/sp.h b/sql/sp.h
index 00dd8416c1d..16d79026132 100644
--- a/sql/sp.h
+++ b/sql/sp.h
@@ -28,6 +28,7 @@
#define SP_PARSE_ERROR -6
#define SP_INTERNAL_ERROR -7
#define SP_NO_DB_ERROR -8
+#define SP_BAD_IDENTIFIER -9
/* Drop all routines in database 'db' */
int
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index b36f88cf8c8..2191eba2f3e 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -4019,6 +4019,12 @@ unsent_create_error:
delete lex->sphead;
lex->sphead= 0;
goto error;
+ case SP_BAD_IDENTIFIER:
+ my_error(ER_TOO_LONG_IDENT, MYF(0), name);
+ lex->unit.cleanup();
+ delete lex->sphead;
+ lex->sphead= 0;
+ goto error;
default:
my_error(ER_SP_STORE_FAILED, MYF(0), SP_TYPE_STRING(lex), name);
lex->unit.cleanup();