Changeset: 61a91753a36d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=61a91753a36d
Modified Files:
monetdb5/mal/Tests/tst180.stable.err
monetdb5/mal/Tests/tst180.stable.out
monetdb5/mal/mal_builder.c
Branch: default
Log Message:
Don't continue building a variable when you already know
that an exception has occurred. strlen(NULL) would crash
diffs (142 lines):
diff --git a/monetdb5/mal/Tests/tst180.stable.err
b/monetdb5/mal/Tests/tst180.stable.err
--- a/monetdb5/mal/Tests/tst180.stable.err
+++ b/monetdb5/mal/Tests/tst180.stable.err
@@ -24,6 +24,11 @@ stderr of test 'tst180` in directory 'mo
# 23:13:31 > "mclient" "-lmal" "-ftest" "-tnone" "-Eutf-8"
"--host=/var/tmp/mtest-9044" "--port=31028"
# 23:13:31 >
+MAPI = (monetdb) /var/tmp/mtest-25335/.s.monetdb.36657
+QUERY = # errors in the constant types
+ x:= 1:bat[:int];
+ io.print(x);
+
# 23:13:31 >
# 23:13:31 > "Done."
diff --git a/monetdb5/mal/Tests/tst180.stable.out
b/monetdb5/mal/Tests/tst180.stable.out
--- a/monetdb5/mal/Tests/tst180.stable.out
+++ b/monetdb5/mal/Tests/tst180.stable.out
@@ -63,34 +63,6 @@ stdout of test 'tst180` in directory 'mo
# 23:13:31 > "mclient" "-lmal" "-ftest" "-tnone" "-Eutf-8"
"--host=/var/tmp/mtest-9044" "--port=31028"
# 23:13:31 >
-#--------------------------#
-# h t # name
-# void str # type
-#--------------------------#
-[ 0@0, "gdk_dbpath" ]
-[ 1@0, "mapi_port" ]
-[ 2@0, "mapi_open" ]
-[ 3@0, "mapi_ipv6" ]
-[ 4@0, "mapi_autosense" ]
-[ 5@0, "sql_optimizer" ]
-[ 6@0, "sql_debug" ]
-[ 7@0, "raw_strings" ]
-[ 8@0, "gdk_nr_threads" ]
-[ 9@0, "mapi_usock" ]
-[ 10@0, "embedded_c" ]
-[ 11@0, "gdk_dbname" ]
-[ 12@0, "gdk_vm_maxsize" ]
-[ 13@0, "gdk_mem_maxsize" ]
-[ 14@0, "gdk_mmap_minsize_persistent" ]
-[ 15@0, "gdk_mmap_minsize_transient" ]
-[ 16@0, "gdk_mmap_pagesize" ]
-[ 17@0, "monet_pid" ]
-[ 18@0, "revision" ]
-[ 19@0, "monet_version" ]
-[ 20@0, "monet_release" ]
-[ 21@0, "monet_mod_path" ]
-[ 22@0, "max_clients" ]
-[ 23@0, "recovery" ]
# 23:13:31 >
# 23:13:31 > "Done."
diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -110,13 +110,14 @@ newComment(MalBlkPtr mb, const char *val
cst.vtype= TYPE_str;
if ((cst.val.sval= GDKstrdup(val)) == NULL)
addMalException(mb, createException(MAL, "newComment", "Can not
allocate comment"));
-
- cst.len = strlen(cst.val.sval);
- k = defConstant(mb, TYPE_str, &cst);
- if( k >= 0){
- getArg(q,0) = k;
- clrVarConstant(mb,getArg(q,0));
- setVarDisabled(mb,getArg(q,0));
+ else {
+ cst.len = strlen(cst.val.sval);
+ k = defConstant(mb, TYPE_str, &cst);
+ if( k >= 0){
+ getArg(q,0) = k;
+ clrVarConstant(mb,getArg(q,0));
+ setVarDisabled(mb,getArg(q,0));
+ }
}
pushInstruction(mb, q);
return q;
@@ -502,10 +503,12 @@ pushStr(MalBlkPtr mb, InstrPtr q, const
cst.vtype= TYPE_str;
if ((cst.val.sval= GDKstrdup(Val)) == NULL)
addMalException(mb, createException(MAL, "pushStr", "Can not
allocate string variable"));
- cst.len = strlen(cst.val.sval);
- _t = defConstant(mb,TYPE_str,&cst);
- if( _t >= 0)
- return pushArgument(mb, q, _t);
+ else{
+ cst.len = strlen(cst.val.sval);
+ _t = defConstant(mb,TYPE_str,&cst);
+ if( _t >= 0)
+ return pushArgument(mb, q, _t);
+ }
return q;
}
@@ -589,18 +592,20 @@ pushNilType(MalBlkPtr mb, InstrPtr q, ch
idx= getAtomIndex(tpe, strlen(tpe), TYPE_any);
if( idx < 0 || idx >= GDKatomcnt || idx >= MAXATOMS)
addMalException(mb, createException(MAL, "pushNilType", "Can
not allocate type variable"));
- cst.vtype=TYPE_void;
- cst.val.oval= oid_nil;
- cst.len = 0;
- msg = convertConstant(idx, &cst);
- if (msg != MAL_SUCCEED) {
- addMalException(mb, msg);
- freeException(msg);
- }
- _t = defConstant(mb,idx,&cst);
- if( _t >= 0){
- setVarUDFtype(mb,_t);
- return pushArgument(mb, q, _t);
+ else {
+ cst.vtype=TYPE_void;
+ cst.val.oval= oid_nil;
+ cst.len = 0;
+ msg = convertConstant(idx, &cst);
+ if (msg != MAL_SUCCEED) {
+ addMalException(mb, msg);
+ freeException(msg);
+ }
+ _t = defConstant(mb,idx,&cst);
+ if( _t >= 0){
+ setVarUDFtype(mb,_t);
+ return pushArgument(mb, q, _t);
+ }
}
return q;
}
@@ -673,8 +678,10 @@ pushValue(MalBlkPtr mb, InstrPtr q, ValP
assert(q);
if (VALcopy(&cst, vr) == NULL)
addMalException(mb, createException(MAL, "pushValue", "Can not
allocate variable"));
- _t = defConstant(mb,cst.vtype,&cst);
- if( _t >=0 )
- return pushArgument(mb, q, _t);
+ else {
+ _t = defConstant(mb,cst.vtype,&cst);
+ if( _t >=0 )
+ return pushArgument(mb, q, _t);
+ }
return q;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list