Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
54a2448b
Commit
54a2448b
authored
Feb 28, 2005
by
pem@mysql.comhem.se
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed BUG#8760: Stored Procedures: Invalid SQLSTATE is allowed in
a DECLARE ? HANDLER FOR stmt.
parent
07a87c98
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
105 additions
and
5 deletions
+105
-5
mysql-test/r/sp-error.result
mysql-test/r/sp-error.result
+28
-0
mysql-test/t/sp-error.test
mysql-test/t/sp-error.test
+38
-0
sql/share/errmsg.txt
sql/share/errmsg.txt
+2
-0
sql/sp_pcontext.cc
sql/sp_pcontext.cc
+24
-0
sql/sp_pcontext.h
sql/sp_pcontext.h
+6
-0
sql/sql_yacc.yy
sql/sql_yacc.yy
+7
-5
No files found.
mysql-test/r/sp-error.result
View file @
54a2448b
...
...
@@ -466,4 +466,32 @@ ERROR 70100: Query execution was interrupted
call bug6807()|
ERROR 70100: Query execution was interrupted
drop procedure bug6807|
drop procedure if exists bug8776_1|
drop procedure if exists bug8776_2|
drop procedure if exists bug8776_3|
drop procedure if exists bug8776_4|
create procedure bug8776_1()
begin
declare continue handler for sqlstate '42S0200test' begin end;
begin end;
end|
ERROR 42000: Bad SQLSTATE: '42S0200test'
create procedure bug8776_2()
begin
declare continue handler for sqlstate '4200' begin end;
begin end;
end|
ERROR 42000: Bad SQLSTATE: '4200'
create procedure bug8776_3()
begin
declare continue handler for sqlstate '420000' begin end;
begin end;
end|
ERROR 42000: Bad SQLSTATE: '420000'
create procedure bug8776_4()
begin
declare continue handler for sqlstate '42x00' begin end;
begin end;
end|
ERROR 42000: Bad SQLSTATE: '42x00'
drop table t1|
mysql-test/t/sp-error.test
View file @
54a2448b
...
...
@@ -641,6 +641,44 @@ call bug6807()|
drop
procedure
bug6807
|
#
# BUG#876: Stored Procedures: Invalid SQLSTATE is allowed in
# a DECLARE ? HANDLER FOR stmt.
#
--
disable_warnings
drop
procedure
if
exists
bug8776_1
|
drop
procedure
if
exists
bug8776_2
|
drop
procedure
if
exists
bug8776_3
|
drop
procedure
if
exists
bug8776_4
|
--
enable_warnings
--
error
ER_SP_BAD_SQLSTATE
create
procedure
bug8776_1
()
begin
declare
continue
handler
for
sqlstate
'42S0200test'
begin
end
;
begin
end
;
end
|
--
error
ER_SP_BAD_SQLSTATE
create
procedure
bug8776_2
()
begin
declare
continue
handler
for
sqlstate
'4200'
begin
end
;
begin
end
;
end
|
--
error
ER_SP_BAD_SQLSTATE
create
procedure
bug8776_3
()
begin
declare
continue
handler
for
sqlstate
'420000'
begin
end
;
begin
end
;
end
|
--
error
ER_SP_BAD_SQLSTATE
create
procedure
bug8776_4
()
begin
declare
continue
handler
for
sqlstate
'42x00'
begin
end
;
begin
end
;
end
|
drop
table
t1
|
...
...
sql/share/errmsg.txt
View file @
54a2448b
...
...
@@ -5326,3 +5326,5 @@ ER_PROC_AUTO_REVOKE_FAIL
eng "Failed to revoke all privileges to dropped routine"
ER_DATA_TOO_LONG 22001
eng "Data too long for column '%s' at row %ld"
ER_SP_BAD_SQLSTATE 42000
eng "Bad SQLSTATE: '%s'"
sql/sp_pcontext.cc
View file @
54a2448b
...
...
@@ -26,6 +26,30 @@
#include "sp_pcontext.h"
#include "sp_head.h"
/*
* Sanity check for SQLSTATEs. Will not check if it's really an existing
* state (there are just too many), but will check length and bad characters.
* Returns TRUE if it's ok, FALSE if it's bad.
*/
bool
sp_cond_check
(
LEX_STRING
*
sqlstate
)
{
int
i
;
const
char
*
p
;
if
(
sqlstate
->
length
!=
5
)
return
FALSE
;
for
(
p
=
sqlstate
->
str
,
i
=
0
;
i
<
5
;
i
++
)
{
char
c
=
p
[
i
];
if
((
c
<
'0'
||
'9'
<
c
)
&&
(
c
<
'A'
||
'Z'
<
c
))
return
FALSE
;
}
return
TRUE
;
}
sp_pcontext
::
sp_pcontext
(
sp_pcontext
*
prev
)
:
Sql_alloc
(),
m_psubsize
(
0
),
m_csubsize
(
0
),
m_hsubsize
(
0
),
m_handlers
(
0
),
m_parent
(
prev
)
...
...
sql/sp_pcontext.h
View file @
54a2448b
...
...
@@ -60,6 +60,12 @@ typedef struct sp_cond_type
uint
mysqlerr
;
}
sp_cond_type_t
;
/* Sanity check for SQLSTATEs. Will not check if it's really an existing
* state (there are just too many), but will check length bad characters.
*/
extern
bool
sp_cond_check
(
LEX_STRING
*
sqlstate
);
typedef
struct
sp_cond
{
LEX_STRING
name
;
...
...
sql/sql_yacc.yy
View file @
54a2448b
...
...
@@ -1760,13 +1760,15 @@ sp_cond:
}
| SQLSTATE_SYM opt_value TEXT_STRING_literal
{ /* SQLSTATE */
uint len= ($3.length < sizeof($$->sqlstate)-1 ?
$3.length : sizeof($$->sqlstate)-1);
if (!sp_cond_check(&$3))
{
my_error(ER_SP_BAD_SQLSTATE, MYF(0), $3.str);
YYABORT;
}
$$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
$$->type= sp_cond_type_t::state;
memcpy($$->sqlstate, $3.str,
len
);
$$->sqlstate[
len
]= '\0';
memcpy($$->sqlstate, $3.str,
5
);
$$->sqlstate[
5
]= '\0';
}
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment