Loading mysql-test/r/sp.result +31 −0 Original line number Diff line number Diff line Loading @@ -3617,4 +3617,35 @@ count(*) drop table t3, t4| drop procedure bug14210| set @@session.max_heap_table_size=default| drop function if exists bug14723| drop procedure if exists bug14723| /*!50003 create function bug14723() returns bigint(20) main_loop: begin return 42; end */;; show create function bug14723;; Function sql_mode Create Function bug14723 CREATE FUNCTION `bug14723`() RETURNS bigint(20) main_loop: begin return 42; end select bug14723();; bug14723() 42 /*!50003 create procedure bug14723() main_loop: begin select 42; end */;; show create procedure bug14723;; Procedure sql_mode Create Procedure bug14723 CREATE PROCEDURE `bug14723`() main_loop: begin select 42; end call bug14723();; 42 42 drop function bug14723| drop procedure bug14723| drop table t1,t2; mysql-test/t/sp.test +32 −0 Original line number Diff line number Diff line Loading @@ -4541,6 +4541,38 @@ drop table t3, t4| drop procedure bug14210| set @@session.max_heap_table_size=default| # # BUG#1473: Dumping of stored functions seems to cause corruption in # the function body # --disable_warnings drop function if exists bug14723| drop procedure if exists bug14723| --enable_warnings delimiter ;;| /*!50003 create function bug14723() returns bigint(20) main_loop: begin return 42; end */;; show create function bug14723;; select bug14723();; /*!50003 create procedure bug14723() main_loop: begin select 42; end */;; show create procedure bug14723;; call bug14723();; delimiter |;; drop function bug14723| drop procedure bug14723| # # BUG#NNNN: New bug synopsis # Loading sql/sp_head.cc +14 −11 Original line number Diff line number Diff line Loading @@ -476,7 +476,7 @@ void sp_head::init_strings(THD *thd, LEX *lex, sp_name *name) { DBUG_ENTER("sp_head::init_strings"); uint n; /* Counter for nul trimming */ uchar *endp; /* Used to trim the end */ /* During parsing, we must use thd->mem_root */ MEM_ROOT *root= thd->mem_root; Loading Loading @@ -509,17 +509,20 @@ sp_head::init_strings(THD *thd, LEX *lex, sp_name *name) (char *)m_param_begin, m_params.length); } m_body.length= lex->ptr - m_body_begin; /* Trim nuls at the end */ n= 0; while (m_body.length && m_body_begin[m_body.length-1] == '\0') { m_body.length-= 1; n+= 1; } /* If ptr has overrun end_of_query then end_of_query is the end */ endp= (lex->ptr > lex->end_of_query ? lex->end_of_query : lex->ptr); /* Trim "garbage" at the end. This is sometimes needed with the "/ * ! VERSION... * /" wrapper in dump files. */ while (m_body_begin < endp && (endp[-1] <= ' ' || endp[-1] == '*' || endp[-1] == '/' || endp[-1] == ';')) endp-= 1; m_body.length= endp - m_body_begin; m_body.str= strmake_root(root, (char *)m_body_begin, m_body.length); m_defstr.length= lex->ptr - lex->buf; m_defstr.length-= n; m_defstr.length= endp - lex->buf; m_defstr.str= strmake_root(root, (char *)lex->buf, m_defstr.length); DBUG_VOID_RETURN; } Loading Loading
mysql-test/r/sp.result +31 −0 Original line number Diff line number Diff line Loading @@ -3617,4 +3617,35 @@ count(*) drop table t3, t4| drop procedure bug14210| set @@session.max_heap_table_size=default| drop function if exists bug14723| drop procedure if exists bug14723| /*!50003 create function bug14723() returns bigint(20) main_loop: begin return 42; end */;; show create function bug14723;; Function sql_mode Create Function bug14723 CREATE FUNCTION `bug14723`() RETURNS bigint(20) main_loop: begin return 42; end select bug14723();; bug14723() 42 /*!50003 create procedure bug14723() main_loop: begin select 42; end */;; show create procedure bug14723;; Procedure sql_mode Create Procedure bug14723 CREATE PROCEDURE `bug14723`() main_loop: begin select 42; end call bug14723();; 42 42 drop function bug14723| drop procedure bug14723| drop table t1,t2;
mysql-test/t/sp.test +32 −0 Original line number Diff line number Diff line Loading @@ -4541,6 +4541,38 @@ drop table t3, t4| drop procedure bug14210| set @@session.max_heap_table_size=default| # # BUG#1473: Dumping of stored functions seems to cause corruption in # the function body # --disable_warnings drop function if exists bug14723| drop procedure if exists bug14723| --enable_warnings delimiter ;;| /*!50003 create function bug14723() returns bigint(20) main_loop: begin return 42; end */;; show create function bug14723;; select bug14723();; /*!50003 create procedure bug14723() main_loop: begin select 42; end */;; show create procedure bug14723;; call bug14723();; delimiter |;; drop function bug14723| drop procedure bug14723| # # BUG#NNNN: New bug synopsis # Loading
sql/sp_head.cc +14 −11 Original line number Diff line number Diff line Loading @@ -476,7 +476,7 @@ void sp_head::init_strings(THD *thd, LEX *lex, sp_name *name) { DBUG_ENTER("sp_head::init_strings"); uint n; /* Counter for nul trimming */ uchar *endp; /* Used to trim the end */ /* During parsing, we must use thd->mem_root */ MEM_ROOT *root= thd->mem_root; Loading Loading @@ -509,17 +509,20 @@ sp_head::init_strings(THD *thd, LEX *lex, sp_name *name) (char *)m_param_begin, m_params.length); } m_body.length= lex->ptr - m_body_begin; /* Trim nuls at the end */ n= 0; while (m_body.length && m_body_begin[m_body.length-1] == '\0') { m_body.length-= 1; n+= 1; } /* If ptr has overrun end_of_query then end_of_query is the end */ endp= (lex->ptr > lex->end_of_query ? lex->end_of_query : lex->ptr); /* Trim "garbage" at the end. This is sometimes needed with the "/ * ! VERSION... * /" wrapper in dump files. */ while (m_body_begin < endp && (endp[-1] <= ' ' || endp[-1] == '*' || endp[-1] == '/' || endp[-1] == ';')) endp-= 1; m_body.length= endp - m_body_begin; m_body.str= strmake_root(root, (char *)m_body_begin, m_body.length); m_defstr.length= lex->ptr - lex->buf; m_defstr.length-= n; m_defstr.length= endp - lex->buf; m_defstr.str= strmake_root(root, (char *)lex->buf, m_defstr.length); DBUG_VOID_RETURN; } Loading