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 -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to