Changeset: 19543ade4f6c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=19543ade4f6c Added Files: sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct.Bug-6411.stable.err sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct.Bug-6411.stable.out sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-not-in.Bug-6416.sql sql/test/bugs/Tests/in.sql sql/test/bugs/Tests/in.stable.err sql/test/bugs/Tests/in.stable.out Removed Files: ChangeLog.Dec2016 buildtools/ChangeLog.Dec2016 clients/ChangeLog.Dec2016 clients/mapilib/ChangeLog.Dec2016 common/stream/ChangeLog.Dec2016 gdk/ChangeLog.Dec2016 geom/ChangeLog.Dec2016 monetdb5/ChangeLog.Dec2016 sql/ChangeLog.Dec2016 testing/ChangeLog.Dec2016 tools/merovingian/ChangeLog.Dec2016 Modified Files: clients/odbc/driver/SQLGetInfo.c gdk/gdk_utils.c monetdb5/mal/mal_instruction.c monetdb5/mal/mal_interpreter.c monetdb5/mal/mal_linker.c monetdb5/mal/mal_listing.c monetdb5/mal/mal_sabaoth.c monetdb5/modules/mal/mal_mapi.c monetdb5/modules/mal/mdb.c monetdb5/modules/mal/remote.c monetdb5/optimizer/opt_mergetable.c monetdb5/optimizer/opt_remoteQueries.c sql/backends/monet5/rel_bin.c sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128 sql/backends/monet5/vaults/bam/Tests/query2.6.sql sql/backends/monet5/vaults/bam/Tests/query2.6.stable.out sql/server/rel_dump.c sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/server/rel_rel.c sql/server/rel_select.c sql/server/sql_semantic.c sql/test/BugDay_2005-10-06_2.9.3/Tests/simple_union.SF-1005596.stable.out sql/test/BugTracker-2012/Tests/null_except_null.Bug-3040.stable.out sql/test/BugTracker-2015/Tests/and_or_in.Bug-3655.stable.out sql/test/BugTracker-2016/Tests/memory-consumption-query-PLAN-25joins.Bug-3972.stable.out sql/test/BugTracker-2017/Tests/All sql/test/BugTracker-2017/Tests/caching_stats_bug.6374.stable.out sql/test/BugTracker-2017/Tests/statistics_nils_not_eq_zero.Bug-6331.stable.out sql/test/Dependencies/Tests/Dependencies.stable.out sql/test/Dependencies/Tests/Dependencies.stable.out.int128 sql/test/Tests/str-pad.sql sql/test/Tests/str-pad.stable.out sql/test/bugs/Tests/All sql/test/bugs/Tests/subselect_multiple_unionall_where_1=1-bug-sf-1005596.stable.out sql/test/bugs/Tests/union_all-bug-sf-941788.stable.out sql/test/mergetables/Tests/part-elim.stable.out Branch: default Log Message:
Merge with Jul2017 diffs (truncated from 3064 to 300 lines): diff --git a/ChangeLog.Dec2016 b/ChangeLog.Dec2016 deleted file mode 100644 --- a/ChangeLog.Dec2016 +++ /dev/null @@ -1,3 +0,0 @@ -# ChangeLog file for devel -# This file is updated with Maddlog - diff --git a/buildtools/ChangeLog.Dec2016 b/buildtools/ChangeLog.Dec2016 deleted file mode 100644 --- a/buildtools/ChangeLog.Dec2016 +++ /dev/null @@ -1,3 +0,0 @@ -# ChangeLog file for buildtools -# This file is updated with Maddlog - diff --git a/clients/ChangeLog.Dec2016 b/clients/ChangeLog.Dec2016 deleted file mode 100644 --- a/clients/ChangeLog.Dec2016 +++ /dev/null @@ -1,7 +0,0 @@ -# ChangeLog file for clients -# This file is updated with Maddlog - -* Mon Jun 12 2017 Sjoerd Mullender <[email protected]> -- A bug was fixed in the implementation of the functions SQLTables in - the ODBC driver where not enough memory was allocated. - diff --git a/clients/mapilib/ChangeLog.Dec2016 b/clients/mapilib/ChangeLog.Dec2016 deleted file mode 100644 --- a/clients/mapilib/ChangeLog.Dec2016 +++ /dev/null @@ -1,3 +0,0 @@ -# ChangeLog file for mapilib -# This file is updated with Maddlog - diff --git a/clients/odbc/driver/SQLGetInfo.c b/clients/odbc/driver/SQLGetInfo.c --- a/clients/odbc/driver/SQLGetInfo.c +++ b/clients/odbc/driver/SQLGetInfo.c @@ -1145,10 +1145,14 @@ MNDBGetInfo(ODBCDbc *dbc, if (sValue) { copyString(sValue, strlen(sValue), InfoValuePtr, BufferLength, StringLengthPtr, SQLSMALLINT, addDbcError, dbc, return SQL_ERROR); } else if (InfoValuePtr) { - if (len == sizeof(SQLULEN)) + if (len == sizeof(SQLUINTEGER)) + *(SQLUINTEGER *) InfoValuePtr = (SQLUINTEGER) nValue; +#ifndef SQLULEN + /* if SQLULEN is defined, it's defined as SQLUINTEGER + * which we've handled */ + else if (len == sizeof(SQLULEN)) *(SQLULEN *) InfoValuePtr = (SQLULEN) nValue; - else if (len == sizeof(SQLUINTEGER)) - *(SQLUINTEGER *) InfoValuePtr = (SQLUINTEGER) nValue; +#endif else if (len == sizeof(SQLUSMALLINT)) *(SQLUSMALLINT *) InfoValuePtr = (SQLUSMALLINT) nValue; if (StringLengthPtr) diff --git a/common/stream/ChangeLog.Dec2016 b/common/stream/ChangeLog.Dec2016 deleted file mode 100644 --- a/common/stream/ChangeLog.Dec2016 +++ /dev/null @@ -1,3 +0,0 @@ -# ChangeLog file for stream -# This file is updated with Maddlog - diff --git a/gdk/ChangeLog.Dec2016 b/gdk/ChangeLog.Dec2016 deleted file mode 100644 --- a/gdk/ChangeLog.Dec2016 +++ /dev/null @@ -1,3 +0,0 @@ -# ChangeLog file for MonetDB -# This file is updated with Maddlog - diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -1659,11 +1659,12 @@ GDKstrndup(const char *s, size_t size) { char *p; - if (s == NULL || size == 0) + if (s == NULL) return NULL; if ((p = GDKmalloc_internal(size + 1)) == NULL) return NULL; - memcpy(p, s, size); + if (size > 0) + memcpy(p, s, size); p[size] = '\0'; /* make sure it's NULL terminated */ return p; } diff --git a/geom/ChangeLog.Dec2016 b/geom/ChangeLog.Dec2016 deleted file mode 100644 --- a/geom/ChangeLog.Dec2016 +++ /dev/null @@ -1,3 +0,0 @@ -# ChangeLog file for geom -# This file is updated with Maddlog - diff --git a/monetdb5/ChangeLog.Dec2016 b/monetdb5/ChangeLog.Dec2016 deleted file mode 100644 --- a/monetdb5/ChangeLog.Dec2016 +++ /dev/null @@ -1,3 +0,0 @@ -# ChangeLog file for MonetDB5 -# This file is updated with Maddlog - diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -875,12 +875,12 @@ trimMalVariables_(MalBlkPtr mb, MalStkPt freeVariable(mb, i); continue; } - if (i > cnt) { - /* remap temporary variables */ - VarRecord t = mb->var[cnt]; - mb->var[cnt] = mb->var[i]; - mb->var[i] = t; - } + if (i > cnt) { + /* remap temporary variables */ + VarRecord t = mb->var[cnt]; + mb->var[cnt] = mb->var[i]; + mb->var[i] = t; + } /* valgrind finds a leak when we move these variable record * pointers around. */ @@ -1041,7 +1041,8 @@ convertConstant(int type, ValPtr vr) str w; if (vr->vtype == TYPE_void || ATOMcmp(vr->vtype, ATOMnilptr(vr->vtype), VALptr(vr)) == 0) { vr->vtype = type; - vr->val.sval = GDKstrdup(str_nil); + if ((vr->val.sval = GDKstrdup(str_nil)) == NULL) + throw(SYNTAX, "convertConstant", SQLSTATE(HY001) GDK_EXCEPTION); vr->len = (int) strlen(vr->val.sval); return MAL_SUCCEED; } diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c --- a/monetdb5/mal/mal_interpreter.c +++ b/monetdb5/mal/mal_interpreter.c @@ -409,6 +409,8 @@ callMAL(Client cntxt, MalBlkPtr mb, MalS */ if (*env == NULL) { stk = prepareMALstack(mb, mb->vsize); + if (stk == NULL) + throw(MAL, "mal.interpreter", SQLSTATE(HY001) MAL_MALLOC_FAIL); stk->up = 0; *env = stk; } else { diff --git a/monetdb5/mal/mal_linker.c b/monetdb5/mal/mal_linker.c --- a/monetdb5/mal/mal_linker.c +++ b/monetdb5/mal/mal_linker.c @@ -110,10 +110,12 @@ getAddress(str fcnname) adr = (MALfcn) dlsym(dl, fcnname); filesLoaded[lastfile].modname = GDKstrdup("libmonetdb5"); if(filesLoaded[lastfile].modname == NULL) { + dlclose(dl); return NULL; } filesLoaded[lastfile].fullname = GDKstrdup("libmonetdb5"); if(filesLoaded[lastfile].fullname == NULL) { + dlclose(dl); GDKfree(filesLoaded[lastfile].modname); return NULL; } diff --git a/monetdb5/mal/mal_sabaoth.c b/monetdb5/mal/mal_sabaoth.c --- a/monetdb5/mal/mal_sabaoth.c +++ b/monetdb5/mal/mal_sabaoth.c @@ -108,6 +108,8 @@ str SABAOTHgetLocalConnection(str *ret) if (stats != NULL) SABAOTHfreeStatus(&stats); + if(*ret == NULL) + throw(MAL,"sabaoth.getlocalconnection", SQLSTATE(HY001) MAL_MALLOC_FAIL); return(MAL_SUCCEED); } diff --git a/monetdb5/modules/mal/mal_mapi.c b/monetdb5/modules/mal/mal_mapi.c --- a/monetdb5/modules/mal/mal_mapi.c +++ b/monetdb5/modules/mal/mal_mapi.c @@ -1157,7 +1157,9 @@ SERVERsetAlias(void *ret, int *key, str int i; Mapi mid; accessTest(*key, "setAlias"); - SERVERsessions[i].dbalias= GDKstrdup(*dbalias); + SERVERsessions[i].dbalias= GDKstrdup(*dbalias); + if(SERVERsessions[i].dbalias == NULL) + throw(MAL, "mapi.set_alias", SQLSTATE(HY001) MAL_MALLOC_FAIL); (void) ret; return MAL_SUCCEED; } @@ -1348,6 +1350,8 @@ SERVERfetch_field_str(str *ret, int *key accessTest(*key, "fetch_field"); fld= mapi_fetch_field(SERVERsessions[i].hdl,*fnr); *ret= GDKstrdup(fld? fld: str_nil); + if(*ret == NULL) + throw(MAL, "mapi.fetch_field_str", SQLSTATE(HY001) MAL_MALLOC_FAIL); if( mapi_error(mid) ) throw(MAL, "mapi.fetch_field_str", "%s", mapi_result_error(SERVERsessions[i].hdl)); @@ -1465,6 +1469,8 @@ SERVERfetch_line(str *ret, int *key){ throw(MAL, "mapi.fetch_line", "%s", mapi_result_error(SERVERsessions[i].hdl)); *ret= GDKstrdup(fld? fld:str_nil); + if(*ret == NULL) + throw(MAL, "mapi.fetch_line", SQLSTATE(HY001) MAL_MALLOC_FAIL); return MAL_SUCCEED; } @@ -1538,6 +1544,8 @@ SERVERgetError(str *ret, int *key){ int i; accessTest(*key, "getError"); *ret= GDKstrdup(mapi_error_str(mid)); + if(*ret == NULL) + throw(MAL, "mapi.get_error", SQLSTATE(HY001) MAL_MALLOC_FAIL); return MAL_SUCCEED; } @@ -1548,6 +1556,8 @@ SERVERexplain(str *ret, int *key){ accessTest(*key, "explain"); *ret= GDKstrdup(mapi_error_str(mid)); + if(*ret == NULL) + throw(MAL, "mapi.explain", SQLSTATE(HY001) MAL_MALLOC_FAIL); return MAL_SUCCEED; } /* @@ -1562,7 +1572,7 @@ SERVERexplain(str *ret, int *key){ * The generic scheme for handling a remote MAL * procedure call with a single row answer. */ -static void SERVERfieldAnalysis(str fld, int tpe, ValPtr v){ +static int SERVERfieldAnalysis(str fld, int tpe, ValPtr v){ v->vtype= tpe; switch(tpe){ case TYPE_void: @@ -1623,14 +1633,17 @@ static void SERVERfieldAnalysis(str fld, break; case TYPE_str: if(fld==0 || strcmp(fld,"nil")==0){ - v->val.sval= GDKstrdup(str_nil); + if((v->val.sval= GDKstrdup(str_nil)) == NULL) + return -1; v->len= (int) strlen(v->val.sval); } else { - v->val.sval= GDKstrdup(fld); + if((v->val.sval= GDKstrdup(fld)) == NULL) + return -1; v->len= (int) strlen(fld); } break; } + return 0; } str @@ -1650,9 +1663,11 @@ SERVERmapi_rpc_single_row(Client cntxt, /* glue all strings together */ for(i= pci->retc+1; i<pci->argc; i++){ fld= * getArgReference_str(stk,pci,i); - if( qry == 0) + if( qry == 0) { qry= GDKstrdup(fld); - else { + if ( qry == NULL) + throw(MAL, "mapi.rpc",SQLSTATE(HY001) MAL_MALLOC_FAIL); + } else { s= (char*) GDKmalloc(strlen(qry)+strlen(fld)+1); if ( s == NULL) { GDKfree(qry); @@ -1689,9 +1704,8 @@ SERVERmapi_rpc_single_row(Client cntxt, case TYPE_flt: case TYPE_dbl: case TYPE_str: - SERVERfieldAnalysis(fld, - getVarType(mb,getArg(pci,j)), - &stk->stk[pci->argv[j]]); + if(SERVERfieldAnalysis(fld,getVarType(mb,getArg(pci,j)),&stk->stk[pci->argv[j]]) < 0) + throw(MAL, "mapi.rpc", MAL_MALLOC_FAIL); break; default: throw(MAL, "mapi.rpc", @@ -1737,7 +1751,10 @@ SERVERmapi_rpc_bat(Client cntxt, MalBlkP throw(MAL,"mapi.rpc", SQLSTATE(HY001) MAL_MALLOC_FAIL); while( mapi_fetch_row(hdl)){ fld2= mapi_fetch_field(hdl,1); - SERVERfieldAnalysis(fld2, tt, &tval); + if(SERVERfieldAnalysis(fld2, tt, &tval) < 0) { + BBPreclaim(b); + throw(MAL, "mapi.rpc", SQLSTATE(HY001) MAL_MALLOC_FAIL); + } if (BUNappend(b,VALptr(&tval), FALSE) != GDK_SUCCEED) { BBPreclaim(b); throw(MAL, "mapi.rpc", SQLSTATE(HY001) MAL_MALLOC_FAIL); @@ -1800,7 +1817,7 @@ SERVERput(Client cntxt, MalBlkPtr mb, Ma break; default: if ((w = ATOMformat(tpe,val)) == NULL) _______________________________________________ checkin-list mailing list [email protected] https://www.monetdb.org/mailman/listinfo/checkin-list
