Changeset: 90de3d546fe9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/90de3d546fe9
Modified Files:
        common/stream/memio.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_cast.c
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_user.c
        sql/backends/monet5/vaults/fits/fits.c
        sql/common/sql_list.c
        sql/common/sql_mem.c
        sql/include/sql_list.h
        sql/server/rel_unnest.c
        sql/storage/store.c
Branch: Sep2022
Log Message:

Fixing some buglets.


diffs (262 lines):

diff --git a/common/stream/memio.c b/common/stream/memio.c
--- a/common/stream/memio.c
+++ b/common/stream/memio.c
@@ -59,8 +59,8 @@ buffer_get_buf(buffer *b)
        r[b->pos] = '\0';
        b->buf = malloc(b->len);
        if (b->buf == NULL) {
-               free(b);
-               free(r);
+               /* restore b->buf */
+               b->buf = r;
                return NULL;
        }
        b->len = b->buf ? b->len : 0;
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -589,7 +589,7 @@ mvc_add_column_predicate(Client cntxt, M
        if ((t = mvc_bind_table(m, s, tname)) == NULL)
                throw(SQL, "sql.column_predicate", SQLSTATE(42S02) "Table 
missing %s.%s", sname, tname);
        if ((c = mvc_bind_column(m, t, cname)) == NULL)
-               throw(SQL, "sql.column_predicate", SQLSTATE(42S22) "Column not 
found %s.%s",sname,tname);
+               throw(SQL, "sql.column_predicate", SQLSTATE(42S22) "Column not 
found in %s.%s.%s",sname,tname,cname);
 
        if ((m->session->level & tr_snapshot) == tr_snapshot || isNew(c) || 
!isGlobal(c->t) || isGlobalTemp(c->t))
                return MAL_SUCCEED;
@@ -1360,8 +1360,10 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
        else { /*unpartitioned access to base column*/
                int coltype = getBatType(getArgType(mb, pci, 0));
                b = store->storage_api.bind_col(m->session->tr, c, access);
-
-               if (b && b->ttype && b->ttype != coltype) {
+               if (b == NULL)
+                       throw(SQL, "sql.bin", "Couldn't bind column");
+
+               if (b->ttype && b->ttype != coltype) {
                        BBPunfix(b->batCacheid);
                        throw(SQL,"sql.bind",SQLSTATE(42000) "Column type 
mismatch %s.%s.%s",sname,tname,cname);
                }
@@ -1709,8 +1711,10 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl
        else { /*unpartitioned access to base index*/
                int idxtype = getBatType(getArgType(mb, pci, 0));
                b = store->storage_api.bind_idx(m->session->tr, i, access);
-
-               if (b && b->ttype && b->ttype != idxtype) {
+               if (b == NULL)
+                       throw(SQL,"sql.bindidx", "Couldn't bind index");
+
+               if (b->ttype && b->ttype != idxtype) {
                        BBPunfix(b->batCacheid);
                        throw(SQL,"sql.bindidx",SQLSTATE(42000) "Index type 
mismatch %s.%s.%s",sname,tname,iname);
                }
@@ -4876,7 +4880,7 @@ SQLstr_column_vacuum(Client cntxt, MalBl
        if (isTempTable(t))
                throw(SQL, "sql.str_column_vacuum", SQLSTATE(42000) "Cannot 
vacuum column from temporary table");
        if ((c = mvc_bind_column(m, t, cname)) == NULL)
-               throw(SQL, "sql.str_column_vacuum", SQLSTATE(42S22) "Column not 
found %s.%s",sname,tname);
+               throw(SQL, "sql.str_column_vacuum", SQLSTATE(42S22) "Column not 
found in %s.%s.%s",sname,tname,cname);
        if (c->storage_type)
                throw(SQL, "sql.str_column_vacuum", SQLSTATE(42000) "Cannot 
vacuum compressed column");
 
@@ -5013,7 +5017,7 @@ SQLstr_column_auto_vacuum(Client cntxt, 
        if (isTempTable(t))
                throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42000) 
"Cannot vacuum column from temporary table");
        if ((c = mvc_bind_column(m, t, cname)) == NULL)
-               throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42S22) 
"Column not found %s.%s",sname,tname);
+               throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42S22) 
"Column not found in %s.%s.%s",sname,tname,cname);
        if (c->storage_type)
                throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42000) 
"Cannot vacuum compressed column");
 
@@ -5068,7 +5072,7 @@ SQLstr_column_stop_vacuum(Client cntxt, 
        if (isTempTable(t))
                throw(SQL, "sql.str_column_stop_vacuum", SQLSTATE(42000) 
"Cannot vacuum column from temporary table");
        if ((c = mvc_bind_column(m, t, cname)) == NULL)
-               throw(SQL, "sql.str_column_stop_vacuum", SQLSTATE(42S22) 
"Column not found %s.%s",sname,tname);
+               throw(SQL, "sql.str_column_stop_vacuum", SQLSTATE(42S22) 
"Column not found in %s.%s.%s",sname,tname,cname);
 
        if(gdk_remove_callback("str_column_vacuum", 
str_column_vacuum_callback_args_free) != GDK_SUCCEED)
                throw(SQL, "sql.str_column_stop_vacuum", "removing vacuum 
callback failed!");
diff --git a/sql/backends/monet5/sql_cast.c b/sql/backends/monet5/sql_cast.c
--- a/sql/backends/monet5/sql_cast.c
+++ b/sql/backends/monet5/sql_cast.c
@@ -90,7 +90,7 @@ SQLstr_cast(Client cntxt, MalBlkPtr mb, 
        *res = GDKstrdup(r);
        if (!from_str)
                GDKfree(r);
-       if (!res)
+       if (!*res)
                throw(SQL, "calc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
        return MAL_SUCCEED;
 }
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -1238,6 +1238,8 @@ alter_table(Client cntxt, mvc *sql, char
                                if (i->base.new || !i->base.deleted)
                                        continue;
                                sql_idx *ni = mvc_bind_idx(sql, s, 
i->base.name);
+                               if (ni == NULL)
+                                       throw(SQL, "sql.alter_table", "Couldn't 
bind index %s", i->base.name);
                                switch (mvc_drop_idx(sql, s, ni)) {
                                        case -1:
                                                
throw(SQL,"sql.alter_table",SQLSTATE(HY013) MAL_MALLOC_FAIL);
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -2483,10 +2483,12 @@ stmt_rs_column(backend *be, stmt *rs, in
 #define meta(P, Id, Tpe, Args)                                         \
        do {                                                                    
                \
                P = newStmtArgs(mb, batRef, packRef, Args);     \
-               Id = getArg(P,0);                                               
        \
-               setVarType(mb, Id, newBatType(Tpe));            \
-               setVarFixed(mb, Id);                                            
\
-               list = pushArgument(mb, list, Id);                      \
+               if (P) {                                                        
                \
+                       Id = getArg(P,0);                                       
        \
+                       setVarType(mb, Id, newBatType(Tpe));    \
+                       setVarFixed(mb, Id);                                    
\
+                       list = pushArgument(mb, list, Id);              \
+               }                                                               
                        \
        } while (0)
 
 #define metaInfo(P,Tpe,Val)                                            \
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -407,8 +407,7 @@ monet5_create_user(ptr _mvc, str user, s
        }
 
        if ((ret = parse_schema_path_str(m, schema_path, false)) != 
MAL_SUCCEED) {
-               if (schema_buf)
-                       GDKfree(schema_buf);
+               GDKfree(schema_buf);
                return ret;
        }
 
@@ -417,8 +416,7 @@ monet5_create_user(ptr _mvc, str user, s
 
        if (!enc) {
                if (!(pwd = mcrypt_BackendSum(passwd, strlen(passwd)))) {
-                       if (schema_buf)
-                               GDKfree(schema_buf);
+                       GDKfree(schema_buf);
                        throw(MAL, "sql.create_user", SQLSTATE(42000) "Crypt 
backend hash not found");
                }
        } else {
@@ -426,8 +424,7 @@ monet5_create_user(ptr _mvc, str user, s
        }
 
        if ((err = AUTHGeneratePasswordHash(&hash, pwd)) != MAL_SUCCEED) {
-               if (schema_buf)
-                       GDKfree(schema_buf);
+               GDKfree(schema_buf);
                if (!enc)
                        free(pwd);
                throw(MAL, "sql.create_user", SQLSTATE(42000) "create backend 
hash failure");
@@ -529,7 +526,8 @@ monet5_create_privileges(ptr _mvc, sql_s
        char *username = "monetdb";
        char *password = initpasswd ? mcrypt_BackendSum(initpasswd, 
strlen(initpasswd)) : mcrypt_BackendSum("monetdb", strlen("monetdb"));
        char *hash = NULL;
-       if ((err = AUTHGeneratePasswordHash(&hash, password)) != MAL_SUCCEED) {
+       if (password == NULL ||
+               (err = AUTHGeneratePasswordHash(&hash, password)) != 
MAL_SUCCEED) {
                TRC_CRITICAL(SQL_TRANS, "generate password hash failure");
                freeException(err);
                free(password);
diff --git a/sql/backends/monet5/vaults/fits/fits.c 
b/sql/backends/monet5/vaults/fits/fits.c
--- a/sql/backends/monet5/vaults/fits/fits.c
+++ b/sql/backends/monet5/vaults/fits/fits.c
@@ -749,6 +749,10 @@ str FITSattach(Client cntxt, MalBlkPtr m
                s = fname;
        else
                s++;
+       if (strcpy_len(bname, s, sizeof(bname)) >= sizeof(bname)) {
+               fits_close_file(fptr, &status);
+               throw(MAL, "fits.attach", SQLSTATE(FI000) "File name too 
long\n");
+       }
        strcpy(bname, s);
        s = strrchr(bname, '.');
        if (s) *s = 0;
@@ -878,7 +882,7 @@ str FITSattach(Client cntxt, MalBlkPtr m
                                throw(MAL, "fits.attach", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
                        }
                        esc_tunit = SQLescapeString(tunit);
-                       if (!esc_tform) {
+                       if (!esc_tunit) {
                                GDKfree(esc_tform);
                                GDKfree(esc_cname);
                                fits_close_file(fptr, &status);
diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -757,13 +757,15 @@ list_dup(list *l, fdup dup)
 }
 
 list *
-list_flaten(list *l)
+list_flatten(list *l)
 {
        list *res = list_new_(l);
-       for (node *n = l->h ; n ; n = n->next) {
-               list *ll = (list*) n->data;
-               for (node *m = ll->h ; m ; m = m->next)
-                       list_append(res, m->data);
+       if (res) {
+               for (node *n = l->h ; n ; n = n->next) {
+                       list *ll = (list*) n->data;
+                       for (node *m = ll->h ; m ; m = m->next)
+                               list_append(res, m->data);
+               }
        }
        return res;
 }
diff --git a/sql/common/sql_mem.c b/sql/common/sql_mem.c
--- a/sql/common/sql_mem.c
+++ b/sql/common/sql_mem.c
@@ -153,7 +153,7 @@ sa_alloc( sql_allocator *sa, size_t sz )
                if (sa->pa)
                        r = SA_NEW_ARRAY(sa->pa,char,(sz > SA_BLOCK ? sz : 
SA_BLOCK));
            else if (sz <= SA_BLOCK && sa->freelist) {
-                       r = sa_use_freed(sa, sz > SA_BLOCK ? sz : SA_BLOCK);
+                       r = sa_use_freed(sa, SA_BLOCK);
                } else
                        r = GDKmalloc(sz > SA_BLOCK ? sz : SA_BLOCK);
                if (r == NULL) {
diff --git a/sql/include/sql_list.h b/sql/include/sql_list.h
--- a/sql/include/sql_list.h
+++ b/sql/include/sql_list.h
@@ -101,7 +101,7 @@ extern list *list_dup(list *l, fdup dup)
 extern list *list_merge(list *l, list *data, fdup dup);
 extern list *list_merge_destroy(list *l, list *data, fdup dup);
 
-extern list *list_flaten(list *l);
+extern list *list_flatten(list *l);
 
 extern void list_hash_delete(list *l, void *data, fcmp cmp);
 extern void* list_hash_add(list *l, void *data, fcmp cmp);
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3648,7 +3648,7 @@ rewrite_groupings(visitor *v, sql_rel *r
                                sql_rel *nrel;
                                list *l = (list*) n->data, *exps = 
sa_list(v->sql->sa), *pexps = sa_list(v->sql->sa);
 
-                               l = list_flaten(l);
+                               l = list_flatten(l);
                                nrel = rel_groupby(v->sql, rel_dup(rel->l), l);
 
                                for (node *m = rel->exps->h ; m ; m = m->next) {
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2558,6 +2558,9 @@ end:
 static gdk_return __attribute__((__warn_unused_result__))
 hot_snapshot_write_tar(stream *out, const char *prefix, char *plan)
 {
+       if (plan == NULL)
+               return GDK_FAIL;
+
        gdk_return ret = GDK_FAIL;
        const char *p = plan; // our cursor in the plan
        time_t timestamp = 1234567890; // dummy date, Sat 14 Feb 2009 12:31:30 
AM CET
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to