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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to