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

Reply via email to