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