summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <Sinisa@sinisa.nasamreza.org>2004-12-22 21:31:17 +0200
committerunknown <Sinisa@sinisa.nasamreza.org>2004-12-22 21:31:17 +0200
commit74cc635a7cae3f2548ccbbdb2c6775758e554caa (patch)
treeed4f1714352b1cd8e7e369c85f7175a6b2cf52e8
parente6dfed9f4cb88406dec37ffb5ca1fa0b0f2b3e75 (diff)
downloadmariadb-git-74cc635a7cae3f2548ccbbdb2c6775758e554caa.tar.gz
A fix for the bug #7495
mysql-test/r/func_str.result: A result for test case for the bug #7495 involving either LTRIM() or TRIM() within QUOTE() function. mysql-test/t/func_str.test: A test case for the bug #7495 involving either LTRIM() or TRIM() within QUOTE() function. sql/item_strfunc.cc: Changes for LTRIM() and TRIM() functions that aleviate the bug entirely.
-rw-r--r--mysql-test/r/func_str.result12
-rw-r--r--mysql-test/t/func_str.test12
-rw-r--r--sql/item_strfunc.cc4
3 files changed, 26 insertions, 2 deletions
diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result
index d38a2edfa1a..2ca90653fec 100644
--- a/mysql-test/r/func_str.result
+++ b/mysql-test/r/func_str.result
@@ -291,3 +291,15 @@ trim(trailing 'foo' from 'foo')
select trim(leading 'foo' from 'foo');
trim(leading 'foo' from 'foo')
+create table t1 (a varchar(80), b varchar(80));
+insert into t1 values(NULL,"12345");
+insert into t1 values(NULL,"chm");
+select quote(ltrim(concat(' ',t1.b))) from t1;
+quote(ltrim(concat(' ',t1.b)))
+'12345'
+'chm'
+select quote(trim(concat(' ',t1.b))) from t1;
+quote(trim(concat(' ',t1.b)))
+'12345'
+'chm'
+drop table t1;
diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test
index 1ae4db3a42a..421512c4dc4 100644
--- a/mysql-test/t/func_str.test
+++ b/mysql-test/t/func_str.test
@@ -185,3 +185,15 @@ drop table t1;
select trim(trailing 'foo' from 'foo');
select trim(leading 'foo' from 'foo');
+
+#
+# crashing bug with QUOTE() and LTRIM() or TRIM() fixed
+# Bug #7495
+#
+
+create table t1 (a varchar(80), b varchar(80));
+insert into t1 values(NULL,"12345");
+insert into t1 values(NULL,"chm");
+select quote(ltrim(concat(' ',t1.b))) from t1;
+select quote(trim(concat(' ',t1.b))) from t1;
+drop table t1;
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 53a9d3fe219..61477753594 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -1141,7 +1141,7 @@ String *Item_func_ltrim::val_str(String *str)
}
if (ptr == res->ptr())
return res;
- tmp_value.set(*res,(uint) (ptr - res->ptr()),(uint) (end-ptr));
+ tmp_value.copy(res->ptr() + (ptr - res->ptr()), (uint32) (end - ptr));
return &tmp_value;
}
@@ -1266,7 +1266,7 @@ String *Item_func_trim::val_str(String *str)
}
if (ptr == res->ptr() && end == ptr+res->length())
return res;
- tmp_value.set(*res,(uint) (ptr - res->ptr()),(uint) (end-ptr));
+ tmp_value.copy(res->ptr() + (ptr - res->ptr()), (uint32) (end - ptr));
return &tmp_value;
}