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