Changeset: 729711031659 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=729711031659 Modified Files: sql/storage/store.c Branch: Aug2018 Log Message:
Check for strdup failure. diffs (149 lines): diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -3871,7 +3871,7 @@ sys_drop_statistics(sql_trans *tr, sql_c } } -static void +static int sys_drop_column(sql_trans *tr, sql_column *col, int drop_action) { str seq_pos = NULL; @@ -3882,7 +3882,7 @@ sys_drop_column(sql_trans *tr, sql_colum &col->base.id, NULL); if (is_oid_nil(rid)) - return ; + return 0; table_funcs.table_delete(tr, syscolumn, rid); sql_trans_drop_dependencies(tr, col->base.id); sql_trans_drop_any_comment(tr, col->base.id); @@ -3891,6 +3891,9 @@ sys_drop_column(sql_trans *tr, sql_colum sql_sequence * seq = NULL; char *seq_name = _STRDUP(seq_pos + (strlen(next_value_for) - strlen("seq_"))); node *n = NULL; + + if(!seq_name) + return -1; seq_name[strlen(seq_name)-1] = '\0'; n = cs_find_name(&syss->seqs, seq_name); seq = find_sql_sequence(syss, seq_name); @@ -3910,6 +3913,7 @@ sys_drop_column(sql_trans *tr, sql_colum sql_trans_drop_all_dependencies(tr, col->t->s, col->base.id, COLUMN_DEPENDENCY); if (col->type.type->s) sql_trans_drop_dependency(tr, col->base.id, col->type.type->base.id, TYPE_DEPENDENCY); + return 0; } static void @@ -3938,7 +3942,7 @@ sys_drop_idxs(sql_trans *tr, sql_table * } } -static void +static int sys_drop_columns(sql_trans *tr, sql_table *t, int drop_action) { node *n; @@ -3947,8 +3951,10 @@ sys_drop_columns(sql_trans *tr, sql_tabl for (n = t->columns.set->h; n; n = n->next) { sql_column *c = n->data; - sys_drop_column(tr, c, drop_action); + if(sys_drop_column(tr, c, drop_action)) + return -1; } + return 0; } static void @@ -3968,7 +3974,7 @@ sys_drop_parts(sql_trans *tr, sql_table } -static void +static int sys_drop_table(sql_trans *tr, sql_table *t, int drop_action) { sql_schema *syss = find_sql_schema(tr, isGlobal(t)?"sys":"tmp"); @@ -3977,7 +3983,7 @@ sys_drop_table(sql_trans *tr, sql_table oid rid = table_funcs.column_find_row(tr, syscol, &t->base.id, NULL); if (is_oid_nil(rid)) - return ; + return 0; table_funcs.table_delete(tr, systable, rid); sys_drop_keys(tr, t, drop_action); sys_drop_idxs(tr, t, drop_action); @@ -3989,13 +3995,15 @@ sys_drop_table(sql_trans *tr, sql_table sql_trans_drop_dependencies(tr, t->base.id); if (isKindOfTable(t) || isView(t)) - sys_drop_columns(tr, t, drop_action); + if(sys_drop_columns(tr, t, drop_action)) + return -1; if (isGlobal(t)) tr->schema_updates ++; if (drop_action) sql_trans_drop_all_dependencies(tr, t->s, t->base.id, !isView(t) ? TABLE_DEPENDENCY : VIEW_DEPENDENCY); + return 0; } static void @@ -4065,7 +4073,7 @@ sys_drop_types(sql_trans *tr, sql_schema } } -static void +static int sys_drop_tables(sql_trans *tr, sql_schema *s, int drop_action) { node *n; @@ -4074,8 +4082,10 @@ sys_drop_tables(sql_trans *tr, sql_schem for (n = s->tables.set->h; n; n = n->next) { sql_table *t = n->data; - sys_drop_table(tr, t, drop_action); + if(sys_drop_table(tr, t, drop_action)) + return -1; } + return 0; } static void @@ -4379,7 +4389,8 @@ sql_trans_drop_schema(sql_trans *tr, int table_funcs.table_delete(tr, sysschema, rid); sys_drop_funcs(tr, s, drop_action); - sys_drop_tables(tr, s, drop_action); + if(sys_drop_tables(tr, s, drop_action)) + return -1; sys_drop_types(tr, s, drop_action); sys_drop_sequences(tr, s, drop_action); sql_trans_drop_any_comment(tr, s->base.id); @@ -4626,9 +4637,10 @@ sql_trans_drop_table(sql_trans *tr, sql_ *local_id = t->base.id; list_append(tr->dropped, local_id); } - + if (!isDeclaredTable(t)) - sys_drop_table(tr, t, drop_action); + if(sys_drop_table(tr, t, drop_action)) + return -1; t->base.wtime = s->base.wtime = tr->wtime = tr->wstime; if (isGlobal(t) || (t->commit_action != CA_DROP)) @@ -4753,7 +4765,8 @@ sql_trans_drop_column(sql_trans *tr, sql } if (isKindOfTable(t)) - sys_drop_column(tr, col, drop_action); + if(sys_drop_column(tr, col, drop_action)) + return -1; col->base.wtime = t->base.wtime = t->s->base.wtime = tr->wtime = tr->wstime; cs_del(&t->columns, n, col->base.flag); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list