mirror of
https://github.com/MariaDB/server.git
synced 2026-04-20 15:25:33 +02:00
Fixed bug #20710.
This bug occurs when error message length exceeds allowed limit: my_error() function outputs "%s" sequences instead of long string arguments. Formats like %-.64s are very common in errmsg.txt files, however my_error() function simply ignores precision of those formats. mysys/my_error.c: Fixed bug #20710. This bug occurs when error message length exceeds allowed limit: my_error() function output "%s" sequences instead of long string arguments. my_error() function has been fixed to accept formats like %-.64s. mysql-test/t/alter_table.test: Added test case for bug #20710. mysql-test/r/alter_table.result: Added test case for bug #20710.
This commit is contained in:
parent
a8f639fccc
commit
f90870e98f
3 changed files with 29 additions and 0 deletions
|
|
@ -803,3 +803,8 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
|
|||
alter table table_24562 order by no_such_col;
|
||||
ERROR 42S22: Unknown column 'no_such_col' in 'order clause'
|
||||
drop table table_24562;
|
||||
CREATE TABLE t1 (c1 CHAR(255));
|
||||
INSERT INTO t1 VALUES (REPEAT("x", 255)), (REPEAT("x", 255));
|
||||
ALTER TABLE t1 ADD UNIQUE (c1);
|
||||
ERROR 23000: Duplicate entry 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' for key 1
|
||||
DROP TABLE t1;
|
||||
|
|
|
|||
|
|
@ -583,5 +583,16 @@ alter table table_24562 order by no_such_col;
|
|||
|
||||
drop table table_24562;
|
||||
|
||||
#
|
||||
# Bug #20710: adding unique index of column with duplicated
|
||||
# long values to reproduce error message with truncated key value.
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (c1 CHAR(255));
|
||||
INSERT INTO t1 VALUES (REPEAT("x", 255)), (REPEAT("x", 255));
|
||||
--error 1062
|
||||
ALTER TABLE t1 ADD UNIQUE (c1);
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
|
|
|
|||
|
|
@ -82,6 +82,11 @@ int my_error(int nr,myf MyFlags, ...)
|
|||
If "%.*u" or "%.*d" are encountered, the precision number is read
|
||||
from the variable argument list but its value is ignored.
|
||||
*/
|
||||
if (*tpos == '-')
|
||||
{
|
||||
tpos++;
|
||||
olen--;
|
||||
}
|
||||
prec_supplied= 0;
|
||||
if (*tpos== '.')
|
||||
{
|
||||
|
|
@ -94,6 +99,14 @@ int my_error(int nr,myf MyFlags, ...)
|
|||
prec_chars= va_arg(ap, int); /* get length parameter */
|
||||
prec_supplied= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (prec_chars= 0; my_isdigit(&my_charset_latin1, *tpos); tpos++, olen--)
|
||||
{
|
||||
prec_supplied= 1;
|
||||
prec_chars= prec_chars * 10 + *tpos - '0';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!prec_supplied)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue