Changeset: d9db541629c4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d9db541629c4
Modified Files:
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_gencode.c
Branch: default
Log Message:

Allocation checks and fixed memory leaks


diffs (45 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
@@ -979,8 +979,11 @@ RAstatement2(Client cntxt, MalBlkPtr mb,
                                sql_subtype *t = exp_subtype(e);
                                str got = subtype2string(t), expected = (str) 
m->data;
 
-                               if (strcmp(expected, got) != 0)
+                               if (!got)
+                                       msg = createException(SQL, 
"RAstatement2", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                               else if (strcmp(expected, got) != 0)
                                        msg = createException(SQL, 
"RAstatement2", SQLSTATE(42000) "Parameter %d has wrong SQL type, expected %s, 
but got %s instead", i, expected, got);
+                               GDKfree(got);
                                i++;
                        }
                }
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -459,14 +459,23 @@ static int
        for (n = r->exps->h; n; n = n->next) { /* Send SQL types of the 
projection's expressions */
                sql_exp *e = n->data;
                sql_subtype *t = exp_subtype(e);
+               str next = subtype2string(t);
 
+               if (!next) {
+                       GDKfree(buf);
+                       buf = NULL;
+                       break;
+               }
                if ((nr + 100) > len) {
                        buf = GDKrealloc(buf, len*=2);
-                       if(buf == NULL)
+                       if (buf == NULL) {
+                               GDKfree(next);
                                break;
+                       }
                }
 
-               nr += snprintf(buf+nr, len-nr, "%s%s", subtype2string(t), 
n->next?"%%":"");
+               nr += snprintf(buf+nr, len-nr, "%s%s", next, n->next?"%%":"");
+               GDKfree(next);
        }
        if (buf) {
                o = newFcnCall(curBlk, remoteRef, putRef);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to