Changeset: 672de3a2de93 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=672de3a2de93
Modified Files:
monetdb5/mal/mal_import.c
sql/backends/monet5/sql_scenario.c
Branch: Jul2017
Log Message:
Plug some memory leaks.
Do not call buffer_create() and then buffer_init() on the created
buffer: that is guaranteed to leak memory.
diffs (76 lines):
diff --git a/monetdb5/mal/mal_import.c b/monetdb5/mal/mal_import.c
--- a/monetdb5/mal/mal_import.c
+++ b/monetdb5/mal/mal_import.c
@@ -193,19 +193,31 @@ malInclude(Client c, str name, int listi
(void) p;
{
size_t mal_init_len = strlen(mal_init_inline);
- buffer* mal_init_buf = buffer_create(mal_init_len);
- stream* mal_init_stream = buffer_rastream(mal_init_buf, name);
+ buffer* mal_init_buf;
+ stream* mal_init_stream;
+
+ if ((mal_init_buf = GDKmalloc(sizeof(buffer))) == NULL)
+ throw(MAL, "malInclude", MAL_MALLOC_FAIL);
+ if ((mal_init_stream = buffer_rastream(mal_init_buf, name)) ==
NULL) {
+ GDKfree(mal_init_buf);
+ throw(MAL, "malInclude", MAL_MALLOC_FAIL);
+ }
buffer_init(mal_init_buf, mal_init_inline, mal_init_len);
c->srcFile = name;
c->yycur = 0;
c->bak = NULL;
- c->fdin = bstream_create(mal_init_stream, mal_init_len);
+ if ((c->fdin = bstream_create(mal_init_stream, mal_init_len))
== NULL) {
+ mnstr_destroy(mal_init_stream);
+ GDKfree(mal_init_buf);
+ throw(MAL, "malInclude", MAL_MALLOC_FAIL);
+ }
bstream_next(c->fdin);
parseMAL(c, c->curprg, 1);
free(mal_init_buf);
free(mal_init_stream);
free(c->fdin);
c->fdin = NULL;
+ GDKfree(mal_init_buf);
}
#else
if ((filename = malResolveFile(name)) != NULL) {
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -509,18 +509,28 @@ SQLinitClient(Client c)
maybeupgrade = 0;
{
size_t createdb_len = strlen(createdb_inline);
- buffer* createdb_buf = buffer_create(createdb_len);
- stream* createdb_stream = buffer_rastream(createdb_buf,
"createdb.sql");
- bstream* createdb_bstream =
bstream_create(createdb_stream, createdb_len);
+ buffer* createdb_buf;
+ stream* createdb_stream;
+ bstream* createdb_bstream;
+ if ((createdb_buf = GDKmalloc(sizeof(buffer))) == NULL)
+ throw(MAL, "createdb", MAL_MALLOC_FAIL);
buffer_init(createdb_buf, createdb_inline,
createdb_len);
+ if ((createdb_stream = buffer_rastream(createdb_buf,
"createdb.sql")) == NULL) {
+ GDKfree(createdb_buf);
+ throw(MAL, "createdb", MAL_MALLOC_FAIL);
+ }
+ if ((createdb_bstream = bstream_create(createdb_stream,
createdb_len)) == NULL) {
+ mnstr_destroy(createdb_stream);
+ GDKfree(createdb_buf);
+ throw(MAL, "createdb", MAL_MALLOC_FAIL);
+ }
if (bstream_next(createdb_bstream) >= 0)
msg = SQLstatementIntern(c,
&createdb_bstream->buf, "sql.init", TRUE, FALSE, NULL);
else
msg = createException(MAL, "createdb", "could
not load inlined createdb script");
- free(createdb_buf);
- free(createdb_stream);
- free(createdb_bstream);
+ bstream_destroy(createdb_bstream);
+ GDKfree(createdb_buf);
if (m->sa)
sa_destroy(m->sa);
m->sa = NULL;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list