Changeset: e960625b33da for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e960625b33da Modified Files: sql/backends/monet5/sql_statistics.c Branch: Dec2016 Log Message:
Allocate enough memory for query. This fixes bugs 6229 and 6230. diffs (46 lines): diff --git a/sql/backends/monet5/sql_statistics.c b/sql/backends/monet5/sql_statistics.c --- a/sql/backends/monet5/sql_statistics.c +++ b/sql/backends/monet5/sql_statistics.c @@ -60,6 +60,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, sql_trans *tr = m->session->tr; node *nsch, *ntab, *ncol; char *query, *dquery; + size_t querylen; char *maxval = NULL, *minval = NULL; int minlen = 0, maxlen = 0; str sch = 0, tbl = 0, col = 0; @@ -75,11 +76,10 @@ sql_analyze(Client cntxt, MalBlkPtr mb, if (msg != MAL_SUCCEED || (msg = checkSQLContext(cntxt)) != NULL) return msg; + querylen = 0; + query = NULL; dquery = (char *) GDKzalloc(8192); - query = (char *) GDKzalloc(8192); - if (!(dquery && query)) { - GDKfree(dquery); - GDKfree(query); + if (dquery == NULL) { throw(SQL, "analyze", MAL_MALLOC_FAIL); } @@ -204,7 +204,18 @@ sql_analyze(Client cntxt, MalBlkPtr mb, strcpy(maxval, "nil"); strcpy(minval, "nil"); } - snprintf(query, 8192, "insert into sys.statistics (column_id,type,width,stamp,\"sample\",count,\"unique\",nils,minval,maxval,sorted,revsorted) values(%d,'%s',%d,now()," LLFMT "," LLFMT "," LLFMT "," LLFMT ",'%s','%s',%s,%s);", c->base.id, c->type.type->sqlname, width, (samplesize ? samplesize : sz), sz, uniq, nils, minval, maxval, sorted ? "true" : "false", revsorted ? "true" : "false"); + if (strlen(minval) + strlen(maxval) + 1024 > querylen) { + querylen = strlen(minval) + strlen(maxval) + 1024; + GDKfree(query); + query = GDKmalloc(querylen); + if (query == NULL) { + GDKfree(dquery); + GDKfree(maxval); + GDKfree(minval); + throw(SQL, "analyze", MAL_MALLOC_FAIL); + } + } + snprintf(query, querylen, "insert into sys.statistics (column_id,type,width,stamp,\"sample\",count,\"unique\",nils,minval,maxval,sorted,revsorted) values(%d,'%s',%d,now()," LLFMT "," LLFMT "," LLFMT "," LLFMT ",'%s','%s',%s,%s);", c->base.id, c->type.type->sqlname, width, (samplesize ? samplesize : sz), sz, uniq, nils, minval, maxval, sorted ? "true" : "false", revsorted ? "true" : "false"); #ifdef DEBUG_SQL_STATISTICS mnstr_printf(cntxt->fdout, "%s\n", dquery); mnstr_printf(cntxt->fdout, "%s\n", query); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list