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(<z.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(<z.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(<z.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(<z.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