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