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

Reply via email to