Changeset: df3013b728dc for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=df3013b728dc Modified Files: sql/backends/monet5/sql_execute.c Branch: default Log Message:
Avoid freeing non-allocted memory diffs (60 lines): diff --git a/sql/backends/monet5/sql_execute.c b/sql/backends/monet5/sql_execute.c --- a/sql/backends/monet5/sql_execute.c +++ b/sql/backends/monet5/sql_execute.c @@ -201,7 +201,6 @@ SQLexecutePrepared(Client c, backend *be pci = getInstrPtr(mb, 0); if (pci->argc >= MAXARG){ - // FIXME unchecked_malloc GDKmalloc can return NULL argv = (ValPtr *) GDKmalloc(sizeof(ValPtr) * pci->argc); if( argv == NULL) throw(SQL,"sql.prepare",MAL_MALLOC_FAIL); @@ -210,8 +209,11 @@ SQLexecutePrepared(Client c, backend *be if (pci->retc >= MAXARG){ argrec = (ValRecord *) GDKmalloc(sizeof(ValRecord) * pci->retc); - if( argrec == NULL) + if( argrec == NULL){ + if( argv != argvbuffer) + GDKfree(argv); throw(SQL,"sql.prepare",MAL_MALLOC_FAIL); + } } else argrec = argrecbuffer; @@ -225,9 +227,9 @@ SQLexecutePrepared(Client c, backend *be parc = q->paramlen; if (argc != parc) { - if (pci->argc >= MAXARG) + if (pci->argc >= MAXARG && argv != argvbuffer) GDKfree(argv); - if (pci->retc >= MAXARG) + if (pci->retc >= MAXARG && argrec != argrecbuffer) GDKfree(argrec); throw(SQL, "sql.prepare", "07001!EXEC: wrong number of arguments for prepared statement: %d, expected %d", argc, parc); } else { @@ -237,9 +239,9 @@ SQLexecutePrepared(Client c, backend *be if (!atom_cast(m->sa, arg, pt)) { /*sql_error(c, 003, buf); */ - if (pci->argc >= MAXARG) + if (pci->argc >= MAXARG && argv != argvbuffer) GDKfree(argv); - if (pci->retc >= MAXARG) + if (pci->retc >= MAXARG && argrec != argrecbuffer) GDKfree(argrec); throw(SQL, "sql.prepare", "07001!EXEC: wrong type for argument %d of " "prepared statement: %s, expected %s", i + 1, atom_type(arg)->type->sqlname, pt->type->sqlname); } @@ -257,9 +259,9 @@ SQLexecutePrepared(Client c, backend *be q->stk = (backend_stack) glb; /* save garbageCollected stack */ if (glb && SQLdebug & 1) printStack(GDKstdout, mb, glb); - if (pci->argc >= MAXARG) + if (pci->argc >= MAXARG && argv != argvbuffer) GDKfree(argv); - if (pci->retc >= MAXARG) + if (pci->retc >= MAXARG && argrec != argrecbuffer) GDKfree(argrec); return ret; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list