Changeset: a2d0f5edab15 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a2d0f5edab15
Modified Files:
        sql/server/sql_scan.c
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
Branch: Apr2019
Log Message:

protect scanner against large strings
make sure clear marks table and columns as written
fixed small leak in delta structures of indices


diffs (62 lines):

diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c
--- a/sql/server/sql_scan.c
+++ b/sql/server/sql_scan.c
@@ -709,12 +709,14 @@ scanner_string(mvc *c, int quote, bool e
        while (cur != EOF) {
                unsigned int pos = (int)rs->pos + lc->yycur;
 
-               while ((((cur = rs->buf[pos++]) & 0x80) == 0) && cur && (cur != 
quote || escape)) {
+               while (cur != EOF && (((cur = rs->buf[pos++]) & 0x80) == 0) && 
cur && (cur != quote || escape)) {
                        if (escapes && cur == '\\')
                                escape = !escape;
                        else
                                escape = false;
                }
+               if (cur == EOF)
+                       break;
                lc->yycur = pos - (int)rs->pos;
                /* check for quote escaped quote: Obscure SQL Rule */
                /* TODO also handle double "" */
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1966,6 +1966,7 @@ clear_col(sql_trans *tr, sql_column *c)
                        return 0;
                c->base.allocated = 1;
        }
+       c->t->s->base.wtime = c->t->base.wtime = c->base.wtime = tr->wstime;
        if (c->data)
                return clear_delta(tr, c->data);
        return 0;
@@ -1987,6 +1988,7 @@ clear_idx(sql_trans *tr, sql_idx *i)
                        return 0;
                i->base.allocated = 1;
        }
+       i->t->s->base.wtime = i->t->base.wtime = i->base.wtime = tr->wstime;
        if (i->data)
                return clear_delta(tr, i->data);
        return 0;
@@ -2030,6 +2032,7 @@ clear_del(sql_trans *tr, sql_table *t)
                dup_dbat(tr, obat, bat, isNew(ot), isTempTable(t)); 
                t->base.allocated = 1;
        }
+       t->s->base.wtime = t->base.wtime = tr->wstime;
        return clear_dbat(tr, t->data);
 }
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2403,6 +2403,12 @@ idx_dup(sql_trans *tr, int flags, sql_id
 
        /* Needs copy when committing (ie from tr to gtrans) and 
         * on savepoints from tr->parent to new tr */
+       if (flags) {
+               ni->base.allocated = i->base.allocated;
+               ni->data = i->data;
+               i->base.allocated = 0;
+               i->data = NULL;
+       } else
        if ((isNew(i) && newFlagSet(flags) && tr->parent == gtrans) ||
            (i->base.allocated && tr->parent != gtrans))
                if (isTable(ni->t)) 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to