Changeset: 4949302221c5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4949302221c5
Modified Files:
        monetdb5/modules/mal/oltp.c
        monetdb5/modules/mal/pcre.c
        monetdb5/modules/mal/querylog.c
        monetdb5/modules/mal/remote.c
        monetdb5/modules/mal/sysmon.c
        monetdb5/modules/mal/tablet.c
        monetdb5/modules/mal/tokenizer.c
Branch: default
Log Message:

Error checking.


diffs (truncated from 582 to 300 lines):

diff --git a/monetdb5/modules/mal/oltp.c b/monetdb5/modules/mal/oltp.c
--- a/monetdb5/modules/mal/oltp.c
+++ b/monetdb5/modules/mal/oltp.c
@@ -243,21 +243,13 @@ OLTPtable(Client cntxt, MalBlkPtr mb, Ma
        for( i = 0; msg ==  MAL_SUCCEED && i < MAXOLTPLOCKS; i++)
        if (oltp_locks[i].used ){
                now = oltp_locks[i].start * 1000; // convert to timestamp 
microsecond
-               msg= MTIMEunix_epoch(&ts);
-               if ( msg == MAL_SUCCEED)
-                       msg = MTIMEtimestamp_add(&tsn, &ts, &now);
-
-               if( msg== MAL_SUCCEED && oltp_locks[i].start)
-                       BUNappend(bs, &tsn, FALSE);
-               else
-                       BUNappend(bs, timestamp_nil, FALSE);
-
-               if( oltp_locks[i].cntxt)
-                       BUNappend(bu, &oltp_locks[i].cntxt->username, FALSE);
-               else 
-                       BUNappend(bu, str_nil, FALSE);
-               BUNappend(bl, &i, FALSE);
-               BUNappend(bc, &oltp_locks[i].used, FALSE);
+               if ((msg = MTIMEunix_epoch(&ts)) != MAL_SUCCEED ||
+                       (msg = MTIMEtimestamp_add(&tsn, &ts, &now)) != 
MAL_SUCCEED ||
+                       BUNappend(bs, oltp_locks[i].start ? &tsn : 
timestamp_nil, FALSE) != GDK_SUCCEED ||
+                       BUNappend(bu, oltp_locks[i].cntxt ? 
oltp_locks[i].cntxt->username : str_nil, FALSE) != GDK_SUCCEED ||
+                       BUNappend(bl, &i, FALSE) != GDK_SUCCEED ||
+                       BUNappend(bc, &oltp_locks[i].used, FALSE) != 
GDK_SUCCEED)
+                       goto bailout;
        }
        //OLTPdump_(cntxt,"#lock table\n");
        BBPkeepref(*started = bs->batCacheid);
@@ -265,6 +257,13 @@ OLTPtable(Client cntxt, MalBlkPtr mb, Ma
        BBPkeepref(*lockid = bl->batCacheid);
        BBPkeepref(*used = bc->batCacheid);
        return msg;
+  bailout:
+       BBPunfix(bs->batCacheid);
+       BBPunfix(bl->batCacheid);
+       BBPunfix(bu->batCacheid);
+       BBPunfix(bc->batCacheid);
+       BBPunfix(bq->batCacheid);
+       return msg ? msg : createException(MAL, "oltp.table", MAL_MALLOC_FAIL);
 }
 
 str
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -735,7 +735,8 @@ pcre_replace_bat(BAT **res, BAT *origin_
 
        if ((pcre_code = pcre_compile(pattern, compile_options, &err_p, 
&errpos, NULL)) == NULL) {
                throw(MAL,"pcre_replace_bat", OPERATION_FAILED
-                       "pcre compile of pattern (%s) failed at %d 
with\n'%s'.\n", pattern, errpos, err_p);
+                         ": pcre compile of pattern (%s) failed at %d 
with\n'%s'.\n",
+                         pattern, errpos, err_p);
        }
 
        /* Since the compiled pattern is ging to be used several times, it is 
worth spending
@@ -774,10 +775,11 @@ pcre_replace_bat(BAT **res, BAT *origin_
 
                if (ncaptures > 0){
                        replaced_str = GDKmalloc(len_origin_str - len_del + 
(len_replacement * ncaptures) + 1);
-                       if (!replaced_str) {
+                       if (replaced_str == NULL) {
                                my_pcre_free(pcre_code);
                                pcre_free_study(extra);
                                GDKfree(ovector);
+                               BBPreclaim(tmpbat);
                                throw(MAL, "pcre_replace_bat", MAL_MALLOC_FAIL);
                        }
 
@@ -807,10 +809,23 @@ pcre_replace_bat(BAT **res, BAT *origin_
                        strncpy(replaced_str+k, origin_str+capture_offsets[j], 
len);
                        k += len;
                        replaced_str[k] = '\0';
-                       BUNappend(tmpbat, replaced_str, FALSE);
+                       if (BUNappend(tmpbat, replaced_str, FALSE) != 
GDK_SUCCEED) {
+                               my_pcre_free(pcre_code);
+                               pcre_free_study(extra);
+                               GDKfree(ovector);
+                               GDKfree(replaced_str);
+                               BBPreclaim(tmpbat);
+                               throw(MAL, "pcre_replace_bat", MAL_MALLOC_FAIL);
+                       }
                        GDKfree(replaced_str);
                } else { /* no captured substrings, copy the original string 
into new bat */
-                       BUNappend(tmpbat, origin_str, FALSE);
+                       if (BUNappend(tmpbat, origin_str, FALSE) != 
GDK_SUCCEED) {
+                               my_pcre_free(pcre_code);
+                               pcre_free_study(extra);
+                               GDKfree(ovector);
+                               BBPreclaim(tmpbat);
+                               throw(MAL, "pcre_replace_bat", MAL_MALLOC_FAIL);
+                       }
                }
        }
 
diff --git a/monetdb5/modules/mal/querylog.c b/monetdb5/modules/mal/querylog.c
--- a/monetdb5/modules/mal/querylog.c
+++ b/monetdb5/modules/mal/querylog.c
@@ -311,14 +311,17 @@ QLOGappend(Client cntxt, MalBlkPtr mb, M
        o = BUNfnd(QLOG_cat_id, &mb->tag);
        if ( o == BUN_NONE){
                *ret = mb->tag;
-               BUNappend(QLOG_cat_id,&mb->tag,FALSE);
-               BUNappend(QLOG_cat_query,*q,FALSE);
-               BUNappend(QLOG_cat_pipe,*pipe,FALSE);
-               BUNappend(QLOG_cat_plan,nme,FALSE);
-               BUNappend(QLOG_cat_mal,&mb->stop,FALSE);
-               BUNappend(QLOG_cat_optimize,&mb->optimize,FALSE);
-               BUNappend(QLOG_cat_user,*usr,FALSE);
-               BUNappend(QLOG_cat_defined,tick,FALSE);
+               if (BUNappend(QLOG_cat_id,&mb->tag,FALSE) != GDK_SUCCEED ||
+                       BUNappend(QLOG_cat_query,*q,FALSE) != GDK_SUCCEED ||
+                       BUNappend(QLOG_cat_pipe,*pipe,FALSE) != GDK_SUCCEED ||
+                       BUNappend(QLOG_cat_plan,nme,FALSE) != GDK_SUCCEED ||
+                       BUNappend(QLOG_cat_mal,&mb->stop,FALSE) != GDK_SUCCEED 
||
+                       BUNappend(QLOG_cat_optimize,&mb->optimize,FALSE) != 
GDK_SUCCEED ||
+                       BUNappend(QLOG_cat_user,*usr,FALSE) != GDK_SUCCEED ||
+                       BUNappend(QLOG_cat_defined,tick,FALSE) != GDK_SUCCEED) {
+                       MT_lock_unset(&mal_profileLock);
+                       throw(MAL, "querylog.append", MAL_MALLOC_FAIL);
+               }
        }
        MT_lock_unset(&mal_profileLock);
        TMsubcommit_list(commitlist, committop);
@@ -353,15 +356,18 @@ QLOGcall(Client cntxt, MalBlkPtr mb, Mal
        if ( *xtime + *rtime < QLOGthreshold)
                return MAL_SUCCEED;
        MT_lock_set(&mal_profileLock);
-       BUNappend(QLOG_calls_id,&mb->tag,FALSE);
-       BUNappend(QLOG_calls_start,tick1,FALSE);
-       BUNappend(QLOG_calls_stop,tick2,FALSE);
-       BUNappend(QLOG_calls_arguments,*arg,FALSE);
-       BUNappend(QLOG_calls_tuples,tuples,FALSE);
-       BUNappend(QLOG_calls_exec,xtime,FALSE);
-       BUNappend(QLOG_calls_result,rtime,FALSE);
-       BUNappend(QLOG_calls_cpuload,cpu,FALSE);
-       BUNappend(QLOG_calls_iowait,iowait,FALSE);
+       if (BUNappend(QLOG_calls_id,&mb->tag,FALSE) != GDK_SUCCEED ||
+               BUNappend(QLOG_calls_start,tick1,FALSE) != GDK_SUCCEED ||
+               BUNappend(QLOG_calls_stop,tick2,FALSE) != GDK_SUCCEED ||
+               BUNappend(QLOG_calls_arguments,*arg,FALSE) != GDK_SUCCEED ||
+               BUNappend(QLOG_calls_tuples,tuples,FALSE) != GDK_SUCCEED ||
+               BUNappend(QLOG_calls_exec,xtime,FALSE) != GDK_SUCCEED ||
+               BUNappend(QLOG_calls_result,rtime,FALSE) != GDK_SUCCEED ||
+               BUNappend(QLOG_calls_cpuload,cpu,FALSE) != GDK_SUCCEED ||
+               BUNappend(QLOG_calls_iowait,iowait,FALSE) != GDK_SUCCEED) {
+               MT_lock_unset(&mal_profileLock);
+               throw(MAL, "querylog.call", MAL_MALLOC_FAIL);
+       }
        MT_lock_unset(&mal_profileLock);
        TMsubcommit_list(commitlist, committop);
        return MAL_SUCCEED;
diff --git a/monetdb5/modules/mal/remote.c b/monetdb5/modules/mal/remote.c
--- a/monetdb5/modules/mal/remote.c
+++ b/monetdb5/modules/mal/remote.c
@@ -75,10 +75,6 @@ static unsigned char localtype = 0177;
 static inline str RMTquery(MapiHdl *ret, str func, Mapi conn, str query);
 static inline str RMTinternalcopyfrom(BAT **ret, char *hdr, stream *in);
 
-#define newColumn(Var,Type,sz,Tag)                                             
\
-       Var = COLnew(0, Type, sz, TRANSIENT);                           \
-       if ( Var == NULL) throw(MAL,Tag,MAL_MALLOC_FAIL);
-
 /**
  * Returns a BAT with valid redirects for the given pattern.  If
  * merovingian is not running, this function throws an error.
@@ -104,7 +100,9 @@ str RMTresolve(bat *ret, str *pat) {
                throw(MAL, "remote.resolve", "this function needs the mserver "
                                "have been started by merovingian");
 
-       newColumn(list, TYPE_str, 0, "remote.resolve");
+       list = COLnew(0, TYPE_str, 0, TRANSIENT);
+       if (list == NULL)
+               throw(MAL, "remote.resolve", MAL_MALLOC_FAIL);
 
        /* extract port from mero_uri, let mapi figure out the rest */
        mero_uri+=strlen("mapi:monetdb://");
@@ -119,7 +117,14 @@ str RMTresolve(bat *ret, str *pat) {
                throw(MAL, "remote.resolve", "unknown failure when resolving 
pattern");
 
        while (*redirs != NULL) {
-               BUNappend(list, (ptr)*redirs, FALSE);
+               if (BUNappend(list, (ptr)*redirs, FALSE) != GDK_SUCCEED) {
+                       BBPreclaim(list);
+                       do
+                               free(*redirs);
+                       while (*++redirs);
+                       free(or);
+                       throw(MAL, "remote.resolve", MAL_MALLOC_FAIL);
+               }
                free(*redirs);
                redirs++;
        }
@@ -523,15 +528,17 @@ str RMTget(Client cntxt, MalBlkPtr mb, M
                        return var;
                }
                t = getBatType(rtype);
-               newColumn(b, t, 0, "remote.get");
+               b = COLnew(0, t, 0, TRANSIENT);
+               if (b == NULL)
+                       throw(MAL, "remote.get", MAL_MALLOC_FAIL);
 
                if (ATOMvarsized(t)) {
                        while (mapi_fetch_row(mhdl)) {
-                               var = mapi_fetch_field(mhdl, 1); 
-                               if( var == NULL)
-                                       BUNappend(b, str_nil, FALSE);
-                               else 
-                                       BUNappend(b, var, FALSE);
+                               var = mapi_fetch_field(mhdl, 1);
+                               if (BUNappend(b, var == NULL ? str_nil : var, 
FALSE) != GDK_SUCCEED) {
+                                       BBPreclaim(b);
+                                       throw(MAL, "remote.get", 
MAL_MALLOC_FAIL);
+                               }
                        }
                } else
                        while (mapi_fetch_row(mhdl)) {
@@ -540,8 +547,12 @@ str RMTget(Client cntxt, MalBlkPtr mb, M
                                        var = "nil";
                                s = 0;
                                r = NULL;
-                               ATOMfromstr(t, &r, &s, var);
-                               BUNappend(b, r, FALSE);
+                               if (ATOMfromstr(t, &r, &s, var) <= 0 ||
+                                       BUNappend(b, r, FALSE) != GDK_SUCCEED) {
+                                       BBPreclaim(b);
+                                       GDKfree(r);
+                                       throw(MAL, "remote.get", GDK_EXCEPTION);
+                               }
                                GDKfree(r);
                        }
 
@@ -969,7 +980,9 @@ str RMTbatload(Client cntxt, MalBlkPtr m
        t = getArgType(mb, pci, 1); /* tail type */
        size = *getArgReference_int(stk, pci, 2); /* size */
 
-       newColumn(b, t, size, "remote.load");
+       b = COLnew(0, t, size, TRANSIENT);
+       if (b == NULL)
+               throw(MAL, "remote.load", MAL_MALLOC_FAIL);
 
        /* grab the input stream and start reading */
        fdin->eof = 0;
@@ -997,8 +1010,12 @@ str RMTbatload(Client cntxt, MalBlkPtr m
 
                s = 0;
                r = NULL;
-               ATOMfromstr(t, &r, &s, var);
-               BUNappend(b, r, FALSE);
+               if (ATOMfromstr(t, &r, &s, var) <= 0 ||
+                       BUNappend(b, r, FALSE) != GDK_SUCCEED) {
+                       BBPreclaim(b);
+                       GDKfree(r);
+                       throw(MAL, "remote.get", GDK_EXCEPTION);
+               }
                GDKfree(r);
        }
 
@@ -1193,7 +1210,9 @@ RMTinternalcopyfrom(BAT **ret, char *hdr
                hdr++;
        }
 
-       newColumn(b, bb.Ttype, bb.size, "remote.get");
+       b = COLnew(0, bb.Ttype, bb.size, TRANSIENT);
+       if (b == NULL)
+               throw(MAL, "remote.get", MAL_MALLOC_FAIL);
 
        /* for strings, the width may not match, fix it to match what we
         * retrieved */
diff --git a/monetdb5/modules/mal/sysmon.c b/monetdb5/modules/mal/sysmon.c
--- a/monetdb5/modules/mal/sysmon.c
+++ b/monetdb5/modules/mal/sysmon.c
@@ -32,7 +32,7 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb, 
        int i, prog;
        str usr;
        timestamp ts, tsn;
-       str msg;
+       str msg = MAL_SUCCEED;
 
        (void) cntxt;
        (void) mb;
@@ -67,15 +67,20 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb, 
                        // calculate progress based on past observations
                        prog = (int) ((now- QRYqueue[i].start) / 
(QRYqueue[i].runtime/100.0));
                now = QRYqueue[i].tag;  /* temporarily use so that we have 
correct type */
-               BUNappend(tag, &now, FALSE);
+               if (BUNappend(tag, &now, FALSE) != GDK_SUCCEED)
+                       goto bailout;
                msg = AUTHgetUsername(&usr, cntxt);
                if (msg != MAL_SUCCEED)
                        goto bailout;
 
-               BUNappend(user, usr, FALSE);
+               if (BUNappend(user, usr, FALSE) != GDK_SUCCEED) {
+                       GDKfree(usr);
+                       goto bailout;
+               }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to