Changeset: cdae5ad8377f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cdae5ad8377f
Modified Files:
monetdb5/modules/mal/xid.c
Branch: xid
Log Message:
Inject some more defenses
diffs (51 lines):
diff --git a/monetdb5/modules/mal/xid.c b/monetdb5/modules/mal/xid.c
--- a/monetdb5/modules/mal/xid.c
+++ b/monetdb5/modules/mal/xid.c
@@ -328,7 +328,7 @@ XIDdecode(BUN *rtrn, XIDcolumn col, oid
for (i=XID_IDX_BASE, lim+=i ; i<lim ; i++) {
if (cnt >= cap)
- throw(MAL, "xid.decompress", "result BAT capacity
exceeded in XIDdecode()");
+ throw(MAL, "xid.decompress", "(A) result BAT capacity
exceeded in XIDdecode()");
v = col[i].x.val;
switch ( col[i].x.tag ) {
case XIDSETINC:
@@ -337,6 +337,8 @@ XIDdecode(BUN *rtrn, XIDcolumn col, oid
if ( col[i].x.val & (((xid)1)<<j)){
*o++ = v+j;
cnt++;
+ if (cnt >= cap)
+ throw(MAL, "xid.decompress", "(B)result BAT
capacity exceeded in XIDdecode()");
}
break;
case XIDSETDEC:
@@ -345,21 +347,29 @@ XIDdecode(BUN *rtrn, XIDcolumn col, oid
if ( col[i].x.val & (((xid)1)<<j)){
*o++ = v-j;
cnt++;
+ if (cnt >= cap)
+ throw(MAL, "xid.decompress", "(C)result
BAT capacity exceeded in XIDdecode()");
}
break;
case XIDRANGEEQ:
+ if (cnt+col[i].x.val >= cap)
+ throw(MAL, "xid.decompress", "(D)(result BAT
capacity exceeded in XIDdecode()");
for( j = 0, i++; j < col[i].x.val; j++){
*o++ = v;
cnt++;
}
break;
case XIDRANGEINC:
+ if (cnt+col[i].x.val >= cap)
+ throw(MAL, "xid.decompress", "(E)result BAT
capacity exceeded in XIDdecode()");
for( i++; v <= col[i].x.val; v++){
*o++ = v;
cnt++;
}
break;
case XIDRANGEDEC:
+ if (cnt+col[i].x.val >= cap)
+ throw(MAL, "xid.decompress", "(F)result BAT
capacity exceeded in XIDdecode()");
for( i++; v >= col[i].x.val; v--){
*o++ = v;
cnt++;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list