You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
MDEV-28374 UBSAN signed integer overflow PROCEDURE ANALYSE
PROCEDURE ANALYSE returns a Std (Standard deviation) which involves the
sum of squares, which can exceed the longlong datatypes.
Adjust the sum_sqr and sum value to double to acocunt that its only used
in a double context and precision isn't required.
Reviewed by: Alexander Barkov
INSERT INTO t VALUES (0),('1'),('1'),('1'),('1'),('00010101'),('99991231'),('00101000000'),('691231000000'),('700101000000'),('991231235959'),('10000101000000'),('99991231235959'),('20030100000000'),('20030000000000');
Copy file name to clipboardExpand all lines: mysql-test/main/func_analyse.test
+83Lines changed: 83 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,7 @@
2
2
# Test of procedure analyse
3
3
#
4
4
-- source include/have_innodb.inc
5
+
--source include/have_sequence.inc
5
6
6
7
--disable_warnings
7
8
drop table if exists t1,t2;
@@ -267,3 +268,85 @@ DROP TABLE t;
267
268
--echo #
268
269
--echo # End of 10.5 tests
269
270
--echo #
271
+
272
+
--echo #
273
+
--echo # MDEV-28374 UBSAN signed integer overflow PROCEDURE ANALYSE
274
+
--echo #
275
+
276
+
SET sql_mode='';
277
+
278
+
CREATE TABLE t (a BIGINT);
279
+
INSERT INTO t VALUES ('10000000000000'),('10000000000000');
280
+
SELECT * FROM t PROCEDURE ANALYSE();
281
+
282
+
DROP TABLE t;
283
+
284
+
CREATE TABLE t (a BIGINT UNSIGNED);
285
+
INSERT INTO t VALUES ('18446744073709551615'),('18446744073709551615');
286
+
SELECT * FROM t PROCEDURE ANALYSE();
287
+
288
+
DROP TABLE t;
289
+
290
+
CREATE TABLE t (a BIGINT,KEY a USING BTREE (a));
291
+
INSERT INTO t VALUES (0),('1'),('1'),('1'),('1'),('00010101'),('99991231'),('00101000000'),('691231000000'),('700101000000'),('991231235959'),('10000101000000'),('99991231235959'),('20030100000000'),('20030000000000');
292
+
SELECT * FROM t PROCEDURE ANALYSE();
293
+
294
+
DROP TABLE t;
295
+
296
+
CREATE TABLE t (c BIGINT,c2 DATE,c3 BLOB,KEY(c)) ENGINE=InnoDB;
297
+
INSERT INTO t VALUES (-1.e+308,1,1);
298
+
SELECT * FROM t PROCEDURE ANALYSE();
299
+
300
+
DROP TABLE t;
301
+
302
+
CREATE TABLE t (c INT) ENGINE=InnoDB UNION=(t,t2) INSERT_METHOD=LAST;
303
+
CREATE TABLE t3 LIKE t;
304
+
INSERT INTO t VALUES (1),(2),(-685113344),(0);
305
+
INSERT INTO t3 SELECT * FROM t;
306
+
INSERT INTO t SELECT * FROM t;
307
+
INSERT INTO t SELECT * FROM t;
308
+
INSERT INTO t3 SELECT * FROM t;
309
+
SELECT * FROM t3 PROCEDURE ANALYSE();
310
+
311
+
DROP TABLE t, t3;
312
+
313
+
CREATE TABLE t (c INT) ENGINE=InnoDB UNION=(t,t2) INSERT_METHOD=LAST;
314
+
INSERT INTO t VALUES (1);
315
+
INSERT INTO t VALUES (0xA9BD);
316
+
INSERT INTO t (c) VALUES (ADDTIME(NOW(),1));
317
+
CREATE TABLE c AS SELECT 1 A;
318
+
SELECT * FROM t a,c,t b PROCEDURE ANALYSE();
319
+
320
+
DROP TABLE t, c;
321
+
322
+
CREATE TABLE t (c BIGINT);
323
+
INSERT INTO t VALUES (1000000000000000);
324
+
SELECT * FROM t PROCEDURE ANALYSE(0,0);
325
+
326
+
DROP TABLE t;
327
+
328
+
CREATE SEQUENCE t CACHE=1 MAXVALUE=0 INCREMENT=-1;
329
+
SELECT * FROM t PROCEDURE ANALYSE();
330
+
331
+
DROP SEQUENCE t;
332
+
333
+
CREATE SEQUENCE t CACHE+1;
334
+
SELECT * FROM t PROCEDURE ANALYSE();
335
+
336
+
DROP SEQUENCE t;
337
+
338
+
CREATE TABLE t (c INT) ENGINE=InnoDB;
339
+
INSERT INTO t VALUES (0x31313131),(0x32323232);
340
+
INSERT INTO t VALUES (0x31313131),(0x32323232);
341
+
SELECT * FROM t LIMIT 1 PROCEDURE ANALYSE();
342
+
343
+
DROP TABLE t;
344
+
345
+
CREATE TABLE t (f BIGINT) ENGINE=InnoDB;
346
+
INSERT INTO t VALUES (1),(+1),(1),(1),(+1),(1),(1),(1),(1),(+1),(1),(1),(1),(20030000000000);
0 commit comments