1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  magare.gmz:/home/kgeorge/mysql/autopush/B26281-5.0-opt


sql/item_strfunc.cc:
  Auto merged
mysql-test/r/func_str.result:
  resolved test merge conflicts
mysql-test/t/func_str.test:
  resolved test merge conflicts
This commit is contained in:
unknown
2007-03-09 13:05:41 +02:00
3 changed files with 25 additions and 6 deletions

View File

@ -1960,4 +1960,16 @@ NULL
SELECT UNHEX('G') IS NULL; SELECT UNHEX('G') IS NULL;
UNHEX('G') IS NULL UNHEX('G') IS NULL
1 1
SELECT INSERT('abc', 3, 3, '1234');
INSERT('abc', 3, 3, '1234')
ab1234
SELECT INSERT('abc', 4, 3, '1234');
INSERT('abc', 4, 3, '1234')
abc1234
SELECT INSERT('abc', 5, 3, '1234');
INSERT('abc', 5, 3, '1234')
abc
SELECT INSERT('abc', 6, 3, '1234');
INSERT('abc', 6, 3, '1234')
abc
End of 5.0 tests End of 5.0 tests

View File

@ -1008,7 +1008,6 @@ select repeat('a', cast(2 as unsigned int));
select rpad('abc', cast(5 as unsigned integer), 'x'); select rpad('abc', cast(5 as unsigned integer), 'x');
select lpad('abc', cast(5 as unsigned integer), 'x'); select lpad('abc', cast(5 as unsigned integer), 'x');
# #
# Bug #25197 :repeat function returns null when using table field directly as count # Bug #25197 :repeat function returns null when using table field directly as count
# #
@ -1036,4 +1035,12 @@ DROP TABLE t1;
SELECT UNHEX('G'); SELECT UNHEX('G');
SELECT UNHEX('G') IS NULL; SELECT UNHEX('G') IS NULL;
#
# Bug #26281: INSERT() function mishandles NUL on boundary condition
#
SELECT INSERT('abc', 3, 3, '1234');
SELECT INSERT('abc', 4, 3, '1234');
SELECT INSERT('abc', 5, 3, '1234');
SELECT INSERT('abc', 6, 3, '1234');
--echo End of 5.0 tests --echo End of 5.0 tests

View File

@ -967,18 +967,18 @@ String *Item_func_insert::val_str(String *str)
args[3]->null_value) args[3]->null_value)
goto null; /* purecov: inspected */ goto null; /* purecov: inspected */
if ((start < 0) || (start > res->length() + 1)) if ((start < 0) || (start > res->length()))
return res; // Wrong param; skip insert return res; // Wrong param; skip insert
if ((length < 0) || (length > res->length() + 1)) if ((length < 0) || (length > res->length()))
length= res->length() + 1; length= res->length();
/* start and length are now sufficiently valid to pass to charpos function */ /* start and length are now sufficiently valid to pass to charpos function */
start= res->charpos((int) start); start= res->charpos((int) start);
length= res->charpos((int) length, (uint32) start); length= res->charpos((int) length, (uint32) start);
/* Re-testing with corrected params */ /* Re-testing with corrected params */
if (start > res->length() + 1) if (start > res->length())
return res; // Wrong param; skip insert return res; /* purecov: inspected */ // Wrong param; skip insert
if (length > res->length() - start) if (length > res->length() - start)
length= res->length() - start; length= res->length() - start;