Commit 22e840d7 authored by Alexey Kopytov's avatar Alexey Kopytov

Bug #44792: valgrind warning when casting from time to time

 
Field_time::get_time() did not initialize some members of 
MYSQL_TIME which led to valgrind warnings when those members 
were accessed in Protocol_simple::store_time(). 
 
It is unlikely that this bug could result in wrong data 
being returned, since Field_time::get_time() initializes the 
'day' member of MYSQL_TIME to 0, so the value of 'day' 
in Protocol_simple::store_time() would be 0 regardless 
of the values for 'year' and 'month'.

mysql-test/r/type_time.result:
  Added a test case for bug #44792.
mysql-test/t/type_time.test:
  Added a test case for bug #44792.
sql/field.cc:
  Field_time::get_time() did not initialize some members of 
  MYSQL_TIME which led to valgrind warnings when those members 
  were accessed in Protocol_simple::store_time().
parent e67233ff
...@@ -128,3 +128,13 @@ SELECT sum(f3) FROM t1 where f2='2007-07-01 00:00:00' group by f2; ...@@ -128,3 +128,13 @@ SELECT sum(f3) FROM t1 where f2='2007-07-01 00:00:00' group by f2;
sum(f3) sum(f3)
3 3
drop table t1; drop table t1;
#
# Bug #44792: valgrind warning when casting from time to time
#
CREATE TABLE t1 (c TIME);
INSERT INTO t1 VALUES ('0:00:00');
SELECT CAST(c AS TIME) FROM t1;
CAST(c AS TIME)
00:00:00
DROP TABLE t1;
End of 5.0 tests
...@@ -77,3 +77,16 @@ insert into t1 values('2007-07-02', 1); ...@@ -77,3 +77,16 @@ insert into t1 values('2007-07-02', 1);
insert into t1 values('2007-07-02', 2); insert into t1 values('2007-07-02', 2);
SELECT sum(f3) FROM t1 where f2='2007-07-01 00:00:00' group by f2; SELECT sum(f3) FROM t1 where f2='2007-07-01 00:00:00' group by f2;
drop table t1; drop table t1;
--echo #
--echo # Bug #44792: valgrind warning when casting from time to time
--echo #
CREATE TABLE t1 (c TIME);
INSERT INTO t1 VALUES ('0:00:00');
SELECT CAST(c AS TIME) FROM t1;
DROP TABLE t1;
--echo End of 5.0 tests
...@@ -4877,7 +4877,7 @@ bool Field_time::get_time(MYSQL_TIME *ltime) ...@@ -4877,7 +4877,7 @@ bool Field_time::get_time(MYSQL_TIME *ltime)
ltime->neg= 1; ltime->neg= 1;
tmp=-tmp; tmp=-tmp;
} }
ltime->day= 0; ltime->year= ltime->month= ltime->day= 0;
ltime->hour= (int) (tmp/10000); ltime->hour= (int) (tmp/10000);
tmp-=ltime->hour*10000; tmp-=ltime->hour*10000;
ltime->minute= (int) tmp/100; ltime->minute= (int) tmp/100;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment