summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSinisa@sinisa.nasamreza.org <>2003-12-01 13:47:05 +0200
committerSinisa@sinisa.nasamreza.org <>2003-12-01 13:47:05 +0200
commit168e81d6b698837b00bf96471710ba3aeaa193ae (patch)
tree65f5c8aa7caf5ce9327429cdc2cebb67b2f77bfd
parentcad6b7c8be513390ff345e2e7c2e997446419acf (diff)
parent94a298466c559fed5aa08cfa02aad64ebdd46c6f (diff)
downloadmariadb-git-168e81d6b698837b00bf96471710ba3aeaa193ae.tar.gz
Merge sinisa@bk-internal.mysql.com:/home/bk/mysql-4.0
into sinisa.nasamreza.org:/mnt/work/mysql-4.0
-rw-r--r--mysql-test/r/type_decimal.result6
-rw-r--r--mysql-test/t/type_decimal.test6
-rw-r--r--sql/field.cc4
3 files changed, 14 insertions, 2 deletions
diff --git a/mysql-test/r/type_decimal.result b/mysql-test/r/type_decimal.result
index b74765696a2..df5402c89a8 100644
--- a/mysql-test/r/type_decimal.result
+++ b/mysql-test/r/type_decimal.result
@@ -363,3 +363,9 @@ CREATE TABLE t1 (a_dec DECIMAL(-2,1));
Too big column length for column 'a_dec' (max = 255). Use BLOB instead
CREATE TABLE t1 (a_dec DECIMAL(-1,1));
Too big column length for column 'a_dec' (max = 255). Use BLOB instead
+create table t1(a decimal(10,4));
+insert into t1 values ("+0000100000000");
+select * from t1;
+a
+9999999.9999
+drop table t1;
diff --git a/mysql-test/t/type_decimal.test b/mysql-test/t/type_decimal.test
index 7aedc051905..14d9625710b 100644
--- a/mysql-test/t/type_decimal.test
+++ b/mysql-test/t/type_decimal.test
@@ -240,3 +240,9 @@ CREATE TABLE t1 (a_dec DECIMAL(-1,0));
CREATE TABLE t1 (a_dec DECIMAL(-2,1));
--error 1074
CREATE TABLE t1 (a_dec DECIMAL(-1,1));
+
+# Zero prepend overflow bug
+create table t1(a decimal(10,4));
+insert into t1 values ("+0000100000000");
+select * from t1;
+drop table t1;
diff --git a/sql/field.cc b/sql/field.cc
index 43481ca0963..58781624239 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -632,7 +632,7 @@ void Field_decimal::store(const char *from,uint len)
if (zerofill)
{
left_wall=to-1;
- while (pos != left_wall) // Fill with zeros
+ while (pos > left_wall) // Fill with zeros
*pos--='0';
}
else
@@ -640,7 +640,7 @@ void Field_decimal::store(const char *from,uint len)
left_wall=to+(sign_char != 0)-1;
if (!expo_sign_char) // If exponent was specified, ignore prezeros
{
- for (;pos != left_wall && pre_zeros_from !=pre_zeros_end;
+ for (;pos > left_wall && pre_zeros_from !=pre_zeros_end;
pre_zeros_from++)
*pos--= '0';
}