Below is the list of changes that have just been committed into a local
4.1 repository of ram. When ram does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2006-12-06 16:32:12+04:00, ramil@stripped +4 -0
Fix for bug #22533: Traditional: Too-long bit value not rejected.
Problem: storing >=8 byte hexadecimal values we don't check data.
Fix: check if the data fits the {u}longlong range.
mysql-test/r/select.result@stripped, 2006-12-06 16:32:08+04:00, ramil@stripped +17 -0
Fix for bug #22533: Traditional: Too-long bit value not rejected.
- test result.
mysql-test/t/range.test@stripped, 2006-12-06 16:32:08+04:00, ramil@stripped +2 -2
Fix for bug #22533: Traditional: Too-long bit value not rejected.
- adjusted.
mysql-test/t/select.test@stripped, 2006-12-06 16:32:08+04:00, ramil@stripped +12 -1
Fix for bug #22533: Traditional: Too-long bit value not rejected.
- test case.
sql/item.cc@stripped, 2006-12-06 16:32:08+04:00, ramil@stripped +19 -6
Fix for bug #22533: Traditional: Too-long bit value not rejected.
- limit storing value to {U}LONGLONG_MAX in numeric context.
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: ramil
# Host: myoffice.izhnet.ru
# Root: /usr/home/ram/work/bug22533/my41-bug22533
--- 1.233/sql/item.cc 2006-12-06 16:32:17 +04:00
+++ 1.234/sql/item.cc 2006-12-06 16:32:17 +04:00
@@ -2340,18 +2340,31 @@ longlong Item_varbinary::val_int()
int Item_varbinary::save_in_field(Field *field, bool no_conversions)
{
- int error;
field->set_notnull();
if (field->result_type() == STRING_RESULT)
+ return field->store(str_value.ptr(), str_value.length(),
+ collation.collation);
+
+ ulonglong nr;
+ uint32 length= str_value.length();
+ if (length > 8)
{
- error=field->store(str_value.ptr(),str_value.length(),collation.collation);
+ nr= field->flags & UNSIGNED_FLAG ? ULONGLONG_MAX : LONGLONG_MAX;
+ goto warn;
}
- else
+ nr= (ulonglong) val_int();
+ if ((length == 8) && !(field->flags & UNSIGNED_FLAG) && (nr >
LONGLONG_MAX))
{
- longlong nr=val_int();
- error=field->store(nr);
+ nr= LONGLONG_MAX;
+ goto warn;
}
- return error;
+ return field->store((longlong) nr);
+
+warn:
+ if (!field->store((longlong) nr))
+ field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE,
+ 1);
+ return 1;
}
--- 1.77/mysql-test/r/select.result 2006-12-06 16:32:17 +04:00
+++ 1.78/mysql-test/r/select.result 2006-12-06 16:32:17 +04:00
@@ -2819,3 +2819,20 @@ select min(key1) from t1 where key1 >= 0
min(key1)
0.37619999051094
DROP TABLE t1,t2;
+create table t1(a bigint unsigned, b bigint);
+insert into t1 values (0xfffffffffffffffff, 0xfffffffffffffffff),
+(0x10000000000000000, 0x10000000000000000),
+(0x8fffffffffffffff, 0x8fffffffffffffff);
+Warnings:
+Warning 1264 Data truncated; out of range for column 'a' at row 1
+Warning 1264 Data truncated; out of range for column 'b' at row 1
+Warning 1264 Data truncated; out of range for column 'a' at row 2
+Warning 1264 Data truncated; out of range for column 'b' at row 2
+Warning 1264 Data truncated; out of range for column 'b' at row 3
+select hex(a), hex(b) from t1;
+hex(a) hex(b)
+FFFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
+8FFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
+drop table t1;
+End of 4.1 tests
--- 1.32/mysql-test/t/range.test 2006-12-06 16:32:17 +04:00
+++ 1.33/mysql-test/t/range.test 2006-12-06 16:32:17 +04:00
@@ -400,8 +400,8 @@ select count(*) from t1 where x = 184467
create table t2 (x bigint not null);
-insert into t2(x) values (0xfffffffffffffff0);
-insert into t2(x) values (0xfffffffffffffff1);
+insert into t2(x) values (-16);
+insert into t2(x) values (-15);
select * from t2;
select count(*) from t2 where x>0;
select count(*) from t2 where x=0;
--- 1.60/mysql-test/t/select.test 2006-12-06 16:32:17 +04:00
+++ 1.61/mysql-test/t/select.test 2006-12-06 16:32:17 +04:00
@@ -2342,4 +2342,15 @@ select min(key1) from t1 where key1 >= 0
DROP TABLE t1,t2;
--enable_ps_protocol
-# End of 4.1 tests
+#
+# Bug #22533: storing large hex strings
+#
+
+create table t1(a bigint unsigned, b bigint);
+insert into t1 values (0xfffffffffffffffff, 0xfffffffffffffffff),
+ (0x10000000000000000, 0x10000000000000000),
+ (0x8fffffffffffffff, 0x8fffffffffffffff);
+select hex(a), hex(b) from t1;
+drop table t1;
+
+--echo End of 4.1 tests
| Thread |
|---|
| • bk commit into 4.1 tree (ramil:1.2558) BUG#22533 | ramil | 6 Dec |