summaryrefslogtreecommitdiff
path: root/sql/item_strfunc.cc
diff options
context:
space:
mode:
authorunknown <evgen@moonbone.local>2007-03-11 00:26:45 +0300
committerunknown <evgen@moonbone.local>2007-03-11 00:26:45 +0300
commit8a140cb72eecc8295f847a829ac3c692f0b0ddfd (patch)
tree5688018d1c55ec2c3e437747634fd4fe63bd4f4e /sql/item_strfunc.cc
parent209802eb79f69afd20b8e21db3b86ff6d9d933ea (diff)
parent2f774b479b91cb279c42ce7f191a2ce4993f1890 (diff)
downloadmariadb-git-8a140cb72eecc8295f847a829ac3c692f0b0ddfd.tar.gz
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into moonbone.local:/mnt/gentoo64/work/bk-trees/mysql-5.1-opt mysql-test/r/explain.result: Auto merged mysql-test/r/func_default.result: Auto merged mysql-test/r/func_regexp.result: Auto merged mysql-test/r/func_test.result: Auto merged mysql-test/r/having.result: Auto merged mysql-test/r/olap.result: Auto merged mysql-test/r/subselect.result: Auto merged mysql-test/r/union.result: Auto merged mysql-test/r/varbinary.result: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_strfunc.cc: Auto merged sql/opt_range.cc: Auto merged sql/sql_union.cc: Auto merged mysql-test/r/func_str.result: Manually merged mysql-test/t/func_str.test: Manually merged
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r--sql/item_strfunc.cc17
1 files changed, 8 insertions, 9 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index b96567cf1ff..a011a2884c8 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -964,18 +964,18 @@ String *Item_func_insert::val_str(String *str)
args[3]->null_value)
goto null; /* purecov: inspected */
- if ((start < 0) || (start > res->length() + 1))
+ if ((start < 0) || (start > res->length()))
return res; // Wrong param; skip insert
- if ((length < 0) || (length > res->length() + 1))
- length= res->length() + 1;
+ if ((length < 0) || (length > res->length()))
+ length= res->length();
/* start and length are now sufficiently valid to pass to charpos function */
start= res->charpos((int) start);
length= res->charpos((int) length, (uint32) start);
/* Re-testing with corrected params */
- if (start > res->length() + 1)
- return res; // Wrong param; skip insert
+ if (start > res->length())
+ return res; /* purecov: inspected */ // Wrong param; skip insert
if (length > res->length() - start)
length= res->length() - start;
@@ -1181,11 +1181,10 @@ void Item_func_substr::fix_length_and_dec()
if (args[1]->const_item())
{
int32 start= (int32) args[1]->val_int();
- start= (int32)((start < 0) ? max_length + start : start - 1);
- if (start < 0 || start >= (int32) max_length)
- max_length=0; /* purecov: inspected */
+ if (start < 0)
+ max_length= ((uint)(-start) > max_length) ? 0 : (uint)(-start);
else
- max_length-= (uint) start;
+ max_length-= min((uint)(start - 1), max_length);
}
if (arg_count == 3 && args[2]->const_item())
{