Changeset: 76f30a18ea67 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/76f30a18ea67
Modified Files:
        gdk/gdk_aggr.c
        sql/backends/monet5/bin_partition_by_slice.c
Branch: default
Log Message:

Fix some undefined behavior.


diffs (73 lines):

diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -2357,6 +2357,8 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
                        o = canditer_next(&ci) - b->hseqbase;
                        if (ngrp > 1)
                                gid = (gids ? gids[o] : g->tseqbase + o) - min;
+                       if (inout && cnts[gid] == 0)
+                               avgs[gid] = 0;
                        if (is_bte_nil(vals[o])) {
                                if (!skip_nils) {
                                        avgs[gid] = bte_nil;
@@ -2405,6 +2407,8 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
                        o = canditer_next(&ci) - b->hseqbase;
                        if (ngrp > 1)
                                gid = (gids ? gids[o] : g->tseqbase + o) - min;
+                       if (inout && cnts[gid] == 0)
+                               avgs[gid] = 0;
                        if (is_sht_nil(vals[o])) {
                                if (!skip_nils) {
                                        avgs[gid] = sht_nil;
@@ -2453,6 +2457,8 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
                        o = canditer_next(&ci) - b->hseqbase;
                        if (ngrp > 1)
                                gid = (gids ? gids[o] : g->tseqbase + o) - min;
+                       if (inout && cnts[gid] == 0)
+                               avgs[gid] = 0;
                        if (is_int_nil(vals[o])) {
                                if (!skip_nils) {
                                        avgs[gid] = int_nil;
@@ -2501,6 +2507,8 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
                        o = canditer_next(&ci) - b->hseqbase;
                        if (ngrp > 1)
                                gid = (gids ? gids[o] : g->tseqbase + o) - min;
+                       if (inout && cnts[gid] == 0)
+                               avgs[gid] = 0;
                        if (is_lng_nil(vals[o])) {
                                if (!skip_nils) {
                                        avgs[gid] = lng_nil;
@@ -2550,6 +2558,8 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
                        o = canditer_next(&ci) - b->hseqbase;
                        if (ngrp > 1)
                                gid = (gids ? gids[o] : g->tseqbase + o) - min;
+                       if (inout && cnts[gid] == 0)
+                               avgs[gid] = 0;
                        if (is_hge_nil(vals[o])) {
                                if (!skip_nils) {
                                        avgs[gid] = hge_nil;
diff --git a/sql/backends/monet5/bin_partition_by_slice.c 
b/sql/backends/monet5/bin_partition_by_slice.c
--- a/sql/backends/monet5/bin_partition_by_slice.c
+++ b/sql/backends/monet5/bin_partition_by_slice.c
@@ -68,7 +68,7 @@ exp_getcard(mvc *sql, sql_rel *rel, sql_
 
                if (c) {
                        int de = mvc_is_duplicate_eliminated(sql, c);
-                       if (de && (((lng)1)<<(de*8)) < cnt)
+                       if (de < 8 && (((lng)1)<<(de*8)) < cnt)
                                cnt = (((lng)1)<<(de*8));
                }
        }
@@ -112,10 +112,10 @@ rel_groupby_2_phases(mvc *sql, sql_rel *
                                break;
                        }
                        card *= lcard; /* TODO check for overflow */
+                       if (card > 64*1024) /* TODO add tunable */
+                               return false;
                }
        }
-       if (card > 64*1024) /* TODO add tunable */
-               return false;
        for(node *n = rel->exps->h; n; n = n->next ) {
                sql_exp *e = n->data;
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to