Changeset: e13c4e642c11 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e13c4e642c11
Modified Files:
        monetdb5/extras/rapi/converters.c.h
        monetdb5/extras/rapi/rapi.c
        monetdb5/mal/mal_authorize.c
        monetdb5/modules/atoms/mtime.c
        monetdb5/modules/kernel/bat5.c
        monetdb5/modules/kernel/batstr.c
        monetdb5/modules/kernel/status.c
        monetdb5/modules/mal/batExtensions.c
        monetdb5/modules/mal/bbp.c
        monetdb5/modules/mal/clients.c
        monetdb5/modules/mal/inspect.c
        monetdb5/modules/mal/mal_mapi.c
        monetdb5/modules/mal/mat.c
        monetdb5/modules/mal/mdb.c
Branch: default
Log Message:

Lots of checks of BUNappend; don't call BBPkeepref before BUNappend.


diffs (truncated from 1955 to 300 lines):

diff --git a/monetdb5/extras/rapi/converters.c.h 
b/monetdb5/extras/rapi/converters.c.h
--- a/monetdb5/extras/rapi/converters.c.h
+++ b/monetdb5/extras/rapi/converters.c.h
@@ -221,9 +221,15 @@ static BAT* sexp_to_bat(SEXP s, int type
                        if (rse == NA_STRING) {
                                b->tnil = 1;
                                b->tnonil = 0;
-                               BUNappend(b, str_nil, FALSE);
+                               if (BUNappend(b, str_nil, FALSE) != 
GDK_SUCCEED) {
+                                       BBPreclaim(b);
+                                       b = NULL;
+                               }
                        } else {
-                               BUNappend(b, CHAR(rse), FALSE);
+                               if (BUNappend(b, CHAR(rse), FALSE) != 
GDK_SUCCEED) {
+                                       BBPreclaim(b);
+                                       b = NULL;
+                               }
                        }
                }
                break;
diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -315,10 +315,21 @@ str RAPIeval(Client cntxt, MalBlkPtr mb,
                                msg = createException(MAL, "rapi.eval", 
MAL_MALLOC_FAIL);
                                goto wrapup;
                        }
-                       if ( getArgType(mb,pci,i) == TYPE_str)
-                               BUNappend(b, *getArgReference_str(stk, pci, i), 
FALSE);
-                       else
-                               BUNappend(b, getArgReference(stk, pci, i), 
FALSE);
+                       if ( getArgType(mb,pci,i) == TYPE_str) {
+                               if (BUNappend(b, *getArgReference_str(stk, pci, 
i), FALSE) != GDK_SUCCEED) {
+                                       BBPreclaim(b);
+                                       b = NULL;
+                                       msg = createException(MAL, "rapi.eval", 
MAL_MALLOC_FAIL);
+                                       goto wrapup;
+                               }
+                       } else {
+                               if (BUNappend(b, getArgReference(stk, pci, i), 
FALSE) != GDK_SUCCEED) {
+                                       BBPreclaim(b);
+                                       b = NULL;
+                                       msg = createException(MAL, "rapi.eval", 
MAL_MALLOC_FAIL);
+                                       goto wrapup;
+                               }
+                       }
                        BATsetcount(b, 1);
                        BATsettrivprop(b);
                } else {
diff --git a/monetdb5/mal/mal_authorize.c b/monetdb5/mal/mal_authorize.c
--- a/monetdb5/mal/mal_authorize.c
+++ b/monetdb5/mal/mal_authorize.c
@@ -342,8 +342,11 @@ AUTHaddUser(oid *uid, Client cntxt, cons
        /* we assume the BATs are still aligned */
        rethrow("addUser", tmp, AUTHcypherValue(&hash, passwd));
        /* needs force, as SQL makes a view over user */
-       BUNappend(user, username, TRUE);
-       BUNappend(pass, hash, TRUE);
+       if (BUNappend(user, username, TRUE) != GDK_SUCCEED ||
+               BUNappend(pass, hash, TRUE) != GDK_SUCCEED) {
+               GDKfree(hash);
+               throw(MAL, "addUser", MAL_MALLOC_FAIL);
+       }
        GDKfree(hash);
        /* retrieve the oid of the just inserted user */
        p = AUTHfindUser(username);
@@ -384,7 +387,8 @@ AUTHremoveUser(Client cntxt, const char 
                throw(MAL, "removeUser", "cannot remove yourself");
 
        /* now, we got the oid, start removing the related tuples */
-       BUNappend(duser, &id, TRUE);
+       if (BUNappend(duser, &id, TRUE) != GDK_SUCCEED)
+               throw(MAL, "removeUser", MAL_MALLOC_FAIL);
 
        /* make the stuff persistent */
        AUTHcommit();
diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c
--- a/monetdb5/modules/atoms/mtime.c
+++ b/monetdb5/modules/atoms/mtime.c
@@ -1266,22 +1266,28 @@ union lng_tzone {
  * Wrapper
  * The Monet V5 API interface is defined here
  */
-#define TIMEZONES(X1, X2)                                                      
                        \
-       do {                                                                    
                                        \
-               ticks = (X2);                                                   
                                \
-               MTIMEtzone_create(&ltz.tzval, &ticks);                          
        \
-               vr.val.lval = ltz.lval;                                         
                        \
-               BUNappend(tzbatnme, (X1), FALSE);                       \
-               BUNappend(tzbatdef, &vr.val.lval, FALSE);       \
+#define TIMEZONES(X1, X2)                                                      
                                        \
+       do {                                                                    
                                                        \
+               str err;                                                        
                                                        \
+               ticks = (X2);                                                   
                                                \
+               if ((err = MTIMEtzone_create(&ltz.tzval, &ticks)) != 
MAL_SUCCEED) \
+                       return err;                                             
                                                        \
+               vr.val.lval = ltz.lval;                                         
                                        \
+               if (BUNappend(tzbatnme, (X1), FALSE) != GDK_SUCCEED ||          
        \
+                       BUNappend(tzbatdef, &vr.val.lval, FALSE) != 
GDK_SUCCEED)        \
+                       goto bailout;                                           
                                                \
        } while (0)
 
-#define TIMEZONES2(X1, X2, X3, X4)                                             
                        \
-       do {                                                                    
                                                \
-               ticks = (X2);                                                   
                                        \
-               MTIMEtzone_create_dst(&ltz.tzval, &ticks, &(X3), &(X4));        
\
-               vr.val.lval = ltz.lval;                                         
                                \
-               BUNappend(tzbatnme, (X1), FALSE);                               
\
-               BUNappend(tzbatdef, &vr.val.lval, FALSE);               \
+#define TIMEZONES2(X1, X2, X3, X4)                                             
                                \
+       do {                                                                    
                                                        \
+               str err;                                                        
                                                        \
+               ticks = (X2);                                                   
                                                \
+               if ((err = MTIMEtzone_create_dst(&ltz.tzval, &ticks, &(X3), 
&(X4))) != MAL_SUCCEED) \
+                       return err;                                             
                                                        \
+               vr.val.lval = ltz.lval;                                         
                                        \
+               if (BUNappend(tzbatnme, (X1), FALSE) != GDK_SUCCEED ||          
        \
+                       BUNappend(tzbatdef, &vr.val.lval, FALSE) != 
GDK_SUCCEED)        \
+                       goto bailout;                                           
                                                \
        } while (0)
 
 /*
@@ -1414,6 +1420,8 @@ MTIMEprelude(void *ret)
        TIMEZONES2("Alaska/USA", -9 * 60, RULE_MAR, RULE_OCT);
        msg = "West/Europe";
        return MTIMEtimezone(&tz, &msg);
+  bailout:
+       throw(MAL, "mtime.prelude", MAL_MALLOC_FAIL);
 }
 
 str
diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c
--- a/monetdb5/modules/kernel/bat5.c
+++ b/monetdb5/modules/kernel/bat5.c
@@ -1071,7 +1071,11 @@ BKCshrinkBAT(bat *ret, const bat *bid, c
                                if ( o < ol && *o == oidx ){
                                        o++;
                                } else {
-                                       BUNappend(bn, BUNtail(bi, p), FALSE);
+                                       if (BUNappend(bn, BUNtail(bi, p), 
FALSE) != GDK_SUCCEED) {
+                                               BBPunfix(b->batCacheid);
+                                               BBPunfix(bn->batCacheid);
+                                               throw(MAL, "bat.shrink", 
MAL_MALLOC_FAIL);
+                                       }
                                        cnt++;
                                }
                        }
@@ -1085,6 +1089,8 @@ BKCshrinkBAT(bat *ret, const bat *bid, c
                        case 16:shrinkloop(hge); break;
 #endif
                        default:
+                               BBPunfix(b->batCacheid);
+                               BBPunfix(bn->batCacheid);
                                throw(MAL, "bat.shrink", "Illegal argument 
type");
                        }
                }
@@ -1244,11 +1250,19 @@ BKCreuseBAT(bat *ret, const bat *bid, co
                                                q--;
                                                ol--;
                                        }
-                                       BUNappend(bn, BUNtail(bi, --q), FALSE);
+                                       if (BUNappend(bn, BUNtail(bi, --q), 
FALSE) != GDK_SUCCEED) {
+                                               BBPunfix(b->batCacheid);
+                                               BBPunfix(bn->batCacheid);
+                                               throw(MAL, "bat.shrink", 
MAL_MALLOC_FAIL);
+                                       }
                                        o += (o < ol);
                                        bidx--;
                                } else {
-                                       BUNappend(bn, BUNtail(bi, p), FALSE);
+                                       if (BUNappend(bn, BUNtail(bi, p), 
FALSE) != GDK_SUCCEED) {
+                                               BBPunfix(b->batCacheid);
+                                               BBPunfix(bn->batCacheid);
+                                               throw(MAL,  "bat.shrink", 
MAL_MALLOC_FAIL);
+                                       }
                                }
                        }
                } else {
@@ -1261,6 +1275,8 @@ BKCreuseBAT(bat *ret, const bat *bid, co
                        case 16:reuseloop(hge); break;
 #endif
                        default:
+                               BBPunfix(b->batCacheid);
+                               BBPunfix(bn->batCacheid);
                                throw(MAL, "bat.shrink", "Illegal argument 
type");
                        }
                }
diff --git a/monetdb5/modules/kernel/batstr.c b/monetdb5/modules/kernel/batstr.c
--- a/monetdb5/modules/kernel/batstr.c
+++ b/monetdb5/modules/kernel/batstr.c
@@ -1180,14 +1180,19 @@ STRbatsubstringcst(bat *ret, const bat *
        BATloop(b, p, q) {
                str t =  (str) BUNtail(bi, p);
 
-               if ((msg=STRsubstring(&res, &t, start, length)))
-                       goto bunins_failed;
-               BUNappend(bn, (ptr)res, FALSE);
+               if ((msg = STRsubstring(&res, &t, start, length)) != 
MAL_SUCCEED ||
+                       BUNappend(bn, (ptr)res, FALSE) != GDK_SUCCEED) {
+                       BBPunfix(b->batCacheid);
+                       BBPunfix(bn->batCacheid);
+                       if (msg != MAL_SUCCEED)
+                               return msg;
+                       GDKfree(res);
+                       throw(MAL, "batstr.substring", MAL_MALLOC_FAIL);
+               }
                GDKfree(res);
        }
 
        bn->tnonil = 0;
-  bunins_failed:
        *ret = bn->batCacheid;
        BBPkeepref(bn->batCacheid);
        BBPunfix(b->batCacheid);
diff --git a/monetdb5/modules/kernel/status.c b/monetdb5/modules/kernel/status.c
--- a/monetdb5/modules/kernel/status.c
+++ b/monetdb5/modules/kernel/status.c
@@ -37,16 +37,19 @@
 # include <sys/resource.h>
 #endif
 
-static void
+static int
 pseudo(bat *ret, bat *ret2, BAT *bn, BAT *b) {
-       BATmode(bn,TRANSIENT);
-       BATmode(b,TRANSIENT);
+       if (BATmode(bn,TRANSIENT) != GDK_SUCCEED ||
+               BATmode(b,TRANSIENT) != GDK_SUCCEED) {
+               return -1;
+       }
        BATfakeCommit(b);
        BATfakeCommit(bn);
        *ret = bn->batCacheid;
        BBPkeepref(*ret);
        *ret2 = b->batCacheid;
        BBPkeepref(*ret2);
+       return 0;
 }
 
 str
@@ -157,37 +160,48 @@ SYScpuStatistics(bat *ret, bat *ret2)
        times(&newst);
        /* store counters, ignore errors */
        i = (int) (time(0) - clk);
-       BUNappend(bn, "elapsed", FALSE);
-       BUNappend(b, &i, FALSE);
+       if (BUNappend(bn, "elapsed", FALSE) != GDK_SUCCEED ||
+               BUNappend(b, &i, FALSE) != GDK_SUCCEED)
+               goto bailout;
        i = newst.tms_utime * 1000 / HZ;
-       BUNappend(bn, "user", FALSE);
-       BUNappend(b, &i, FALSE);
+       if (BUNappend(bn, "user", FALSE) != GDK_SUCCEED ||
+               BUNappend(b, &i, FALSE) != GDK_SUCCEED)
+               goto bailout;
        i = (newst.tms_utime - state.tms_utime) * 1000 / HZ;
-       BUNappend(bn, "elapuser", FALSE);
-       BUNappend(b, &i, FALSE);
+       if (BUNappend(bn, "elapuser", FALSE) != GDK_SUCCEED ||
+               BUNappend(b, &i, FALSE) != GDK_SUCCEED)
+               goto bailout;
        i = newst.tms_stime * 1000 / HZ;
-       BUNappend(bn, "system", FALSE);
-       BUNappend(b, &i, FALSE);
+       if (BUNappend(bn, "system", FALSE) != GDK_SUCCEED ||
+               BUNappend(b, &i, FALSE) != GDK_SUCCEED)
+               goto bailout;
        i = (newst.tms_stime - state.tms_stime) * 1000 / HZ;
-       BUNappend(bn, "elapsystem", FALSE);
-       BUNappend(b, &i, FALSE);
+       if (BUNappend(bn, "elapsystem", FALSE) != GDK_SUCCEED ||
+               BUNappend(b, &i, FALSE) != GDK_SUCCEED)
+               goto bailout;
 
        state = newst;
 #else
        i = int_nil;
-       BUNappend(bn, "elapsed", FALSE);
-       BUNappend(b, &i, FALSE);
-       BUNappend(bn, "user", FALSE);
-       BUNappend(b, &i, FALSE);
-       BUNappend(bn, "elapuser", FALSE);
-       BUNappend(b, &i, FALSE);
-       BUNappend(bn, "system", FALSE);
-       BUNappend(b, &i, FALSE);
-       BUNappend(bn, "elapsystem", FALSE);
-       BUNappend(b, &i, FALSE);
+       if (BUNappend(bn, "elapsed", FALSE) != GDK_SUCCEED ||
+               BUNappend(b, &i, FALSE) != GDK_SUCCEED ||
+               BUNappend(bn, "user", FALSE) != GDK_SUCCEED ||
+               BUNappend(b, &i, FALSE) != GDK_SUCCEED ||
+               BUNappend(bn, "elapuser", FALSE) != GDK_SUCCEED ||
+               BUNappend(b, &i, FALSE) != GDK_SUCCEED ||
+               BUNappend(bn, "system", FALSE) != GDK_SUCCEED ||
+               BUNappend(b, &i, FALSE) != GDK_SUCCEED ||
+               BUNappend(bn, "elapsystem", FALSE) != GDK_SUCCEED ||
+               BUNappend(b, &i, FALSE) != GDK_SUCCEED)
+               goto bailout;
 #endif
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to