Changeset: cc732d22329d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cc732d22329d
Modified Files:
        gdk/gdk_join.c
Branch: default
Log Message:

Don't look beyond end of r in mergejoin.


diffs (49 lines):

diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -400,24 +400,30 @@ mergejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                         * The next value to in r is the first if
                         * equal_order is set, the last otherwise. */
                        if (rcand) {
+                               if (rcand == rcandend)
+                                       break;
                                v = VALUE(r, (equal_order ? rcand[0] : 
rcandend[-1]) - r->hseqbase);
-                       } else if (rvals) {
-                               v = VALUE(r, equal_order ? rstart : rend - 1);
-                               if (roff == wrd_nil) {
-                                       rval = oid_nil;
-                                       v = (const char *) &rval;
-                               } else if (roff != 0) {
-                                       rval = (oid) (*(const oid *)v + roff);
+                       } else {
+                               if (rstart == rend)
+                                       break;
+                               if (rvals) {
+                                       v = VALUE(r, equal_order ? rstart : 
rend - 1);
+                                       if (roff == wrd_nil) {
+                                               rval = oid_nil;
+                                               v = (const char *) &rval;
+                                       } else if (roff != 0) {
+                                               rval = (oid) (*(const oid *)v + 
roff);
+                                               v = (const char *) &rval;
+                                       }
+                               } else {
+                                       if (roff == wrd_nil)
+                                               rval = oid_nil;
+                                       else if (equal_order)
+                                               rval = rstart + r->tseqbase;
+                                       else
+                                               rval = rend - 1 + r->tseqbase;
                                        v = (const char *) &rval;
                                }
-                       } else {
-                               if (roff == wrd_nil)
-                                       rval = oid_nil;
-                               else if (equal_order)
-                                       rval = rstart + r->tseqbase;
-                               else
-                                       rval = rend - 1 + r->tseqbase;
-                               v = (const char *) &rval;
                        }
                        /* here, v points to next value in r */
                        if (lcand) {
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to