Changeset: c2ca5122d90e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c2ca5122d90e
Modified Files:
sql/backends/monet5/generator/generator.c
sql/test/BugTracker-2024/Tests/VLTgenerator_table-Bug-7474.test
Branch: default
Log Message:
protect against overflow and floating point exception.
Fixes issue # 7474
diffs (40 lines):
diff --git a/sql/backends/monet5/generator/generator.c
b/sql/backends/monet5/generator/generator.c
--- a/sql/backends/monet5/generator/generator.c
+++ b/sql/backends/monet5/generator/generator.c
@@ -78,7 +78,12 @@ VLTgenerator_noop(Client cntxt, MalBlkPt
if (s == 0 || (s > 0 && f > l) || (s < 0 && f < l) ||
is_##TPE##_nil(f) || is_##TPE##_nil(l)) \
throw(MAL, "generator.table",
\
SQLSTATE(42000) "Illegal generator range");
\
- n = (BUN) ((l - f) / s);
\
+ if (s < 0)
\
+ n = ((BUN)f - l);
\
+ else
\
+ n = ((BUN)l - f);
\
+ step = s<0?-s:s;
\
+ n = n/step;
\
if ((TPE) (n * s + f) != l)
\
n++;
\
bn = COLnew(0, TYPE_##TPE, n, TRANSIENT);
\
@@ -94,7 +99,7 @@ VLTgenerator_noop(Client cntxt, MalBlkPt
static str
VLTgenerator_table_(BAT **result, Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci)
{
- BUN c, n;
+ BUN c, n, step;
BAT *bn;
int tpe;
(void) cntxt;
diff --git a/sql/test/BugTracker-2024/Tests/VLTgenerator_table-Bug-7474.test
b/sql/test/BugTracker-2024/Tests/VLTgenerator_table-Bug-7474.test
--- a/sql/test/BugTracker-2024/Tests/VLTgenerator_table-Bug-7474.test
+++ b/sql/test/BugTracker-2024/Tests/VLTgenerator_table-Bug-7474.test
@@ -10,8 +10,7 @@ SELECT ( NULLIF ( -1 , 255 ) ) FROM GENE
-1
-1
-skipif knownfail
query I nosort
-SELECT ( NULLIF ( -1 , 255 ) ) FROM GENERATE_SERIES ( 2147483647 , -1 )
+SELECT count(*) FROM GENERATE_SERIES ( 2147483647 , -2, -10000000 )
----
--1
+215
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]