From dbcdad7d4a726a28aa0a210a674ec26d1ac5c98e Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 20 Sep 2011 10:59:48 +0200 Subject: Bug#12985030 SIMPLE QUERY WITH DECIMAL NUMBERS LEAKS MEMORY mysql-test/r/func_str.result: New test cases. mysql-test/t/func_str.test: New test cases. strings/dtoa.c: Increasing the buffer size slightly made some queries pass without leaks. Adding Bfree(p51, alloc) fixed the remaining leaks. --- mysql-test/t/func_str.test | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'mysql-test/t/func_str.test') diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test index 9a9a8110a74..2a14648d6f6 100644 --- a/mysql-test/t/func_str.test +++ b/mysql-test/t/func_str.test @@ -1436,6 +1436,25 @@ SHOW CREATE TABLE t1; SELECT * FROM t1; DROP TABLE t1; +--echo # +--echo # Bug#12985030 SIMPLE QUERY WITH DECIMAL NUMBERS LEAKS MEMORY +--echo # + +SELECT (rpad(1.0,2048,1)) IS NOT FALSE; +SELECT ((+0) IN +((0b111111111111111111111111111111111111111111111111111),(rpad(1.0,2048,1)), +(32767.1))); +SELECT ((rpad(1.0,2048,1)) = ('4(') ^ (0.1)); + +--error 1690 +SELECT +pow((rpad(1.0,2048,1)),(b'1111111111111111111111111111111111111111111')); +SELECT ((rpad(1.0,2048,1)) + (0) ^ ('../')); +SELECT stddev_samp(rpad(1.0,2048,1)); +SELECT ((127.1) not in ((rpad(1.0,2048,1)),(''),(-1.1))); +SELECT ((0xf3) * (rpad(1.0,2048,1)) << (0xcc)); + + --echo # --echo # End of 5.5 tests --echo # -- cgit v1.2.1 From 0b706e54bb321cbf88571b03a6fc64c3fecc3d84 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Mon, 26 Sep 2011 14:21:28 +0200 Subject: Bug#12985030 SIMPLE QUERY WITH DECIMAL NUMBERS LEAKS MEMORY Re-write the test, to make pushbuild green. Workaraound for broken pow() function on: SunOS tyr40 5.10 Generic_127112-05 i86pc i386 i86pc (dbx) where current thread: t@1 =>[1] Item_func_pow::val_real(this = 0x238af20) (optimized), at 0xaa8d13 (line ~1980) in "item_func.cc" (dbx) print pow(1.01, 1.0) pow(1.01, 1) = 1.01 (dbx) print pow(1.01, 10.0) pow(1.01, 10) = 1.1046221254112 (dbx) print pow(1.01, 100.0) pow(1.01, 100) = 2.7048138294215 (dbx) print pow(1.01, 1000.0) pow(1.01, 1000) = 20959.155637814 (dbx) print pow(1.01, 10000.0) pow(1.01, 10000) = 1.635828711189e+43 (dbx) print pow(1.01, 100000.0) pow(1.01, 100000) = Infinity (dbx) print pow(1.01, 1000000.0) pow(1.01, 1000000) = Infinity (dbx) print pow(1.01, 10000000.0) pow(1.01, 10000000) = Infinity (dbx) print pow(1.01, 100000000.0) pow(1.01, 100000000) = Infinity (dbx) print pow(1.01, 1000000000.0) pow(1.01, 1000000000) = 0.0 (dbx) print pow(1.01, 10000000000.0) pow(1.01, 10000000000) = 0.0 (dbx) print value value = 1.0111111111111 (dbx) print val2 val2 = 8796093022207.0 (dbx) print pow(value, val2) pow(value, val2) = 0.0 so it seems pow(1.01, y) returns Infinity for large y, but then starts to return 0.0 for even larger values of y. --- mysql-test/t/func_str.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysql-test/t/func_str.test') diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test index 2a14648d6f6..bb22366a98d 100644 --- a/mysql-test/t/func_str.test +++ b/mysql-test/t/func_str.test @@ -1448,7 +1448,7 @@ SELECT ((rpad(1.0,2048,1)) = ('4(') ^ (0.1)); --error 1690 SELECT -pow((rpad(1.0,2048,1)),(b'1111111111111111111111111111111111111111111')); +pow((rpad(10.0,2048,1)),(b'1111111111111111111111111111111111111111111')); SELECT ((rpad(1.0,2048,1)) + (0) ^ ('../')); SELECT stddev_samp(rpad(1.0,2048,1)); SELECT ((127.1) not in ((rpad(1.0,2048,1)),(''),(-1.1))); -- cgit v1.2.1