This commit adds more verbose logging in null-pointer check blocks by using `ovsdb_syntax_error` and `VLOG_ERR`. A few additional null pointer checks are also performed to accompany the additional logging. If a null pointer is encountered in these blocks, the control flow will now be redirected to alternative paths which will output the appropriate error messages.
Signed-off-by: James Raphael Tiovalen <[email protected]> --- ovsdb/condition.c | 10 +++++++++- ovsdb/monitor.c | 3 ++- ovsdb/ovsdb-client.c | 10 ++++++++-- ovsdb/ovsdb-util.c | 9 +++++++++ ovsdb/table.c | 2 +- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/ovsdb/condition.c b/ovsdb/condition.c index d0016fa7f..ada8f50dc 100644 --- a/ovsdb/condition.c +++ b/ovsdb/condition.c @@ -47,7 +47,15 @@ ovsdb_clause_from_json(const struct ovsdb_table_schema *ts, /* Column and arg fields are not being used with boolean functions. * Use dummy values */ - clause->column = ovsdb_table_schema_get_column(ts, "_uuid"); + const struct ovsdb_column *uuid_column = + ovsdb_table_schema_get_column(ts, "_uuid"); + if (uuid_column) { + clause->column = uuid_column; + } else { + return ovsdb_syntax_error(json, + "unknown column", + "No column _uuid in table schema."); + } clause->index = clause->column->index; ovsdb_datum_init_default(&clause->arg, &clause->column->type); return NULL; diff --git a/ovsdb/monitor.c b/ovsdb/monitor.c index 191befcae..4a0d6512f 100644 --- a/ovsdb/monitor.c +++ b/ovsdb/monitor.c @@ -781,7 +781,8 @@ ovsdb_monitor_table_condition_update( const struct json *cond_json) { if (!condition) { - return NULL; + return ovsdb_syntax_error(cond_json, NULL, + "Parse error, condition empty."); } struct ovsdb_monitor_table_condition *mtc = diff --git a/ovsdb/ovsdb-client.c b/ovsdb/ovsdb-client.c index bae2c5f04..41dfeb3b6 100644 --- a/ovsdb/ovsdb-client.c +++ b/ovsdb/ovsdb-client.c @@ -1232,8 +1232,14 @@ parse_monitor_columns(char *arg, const char *server, const char *database, } free(nodes); - add_column(server, ovsdb_table_schema_get_column(table, "_version"), - columns, columns_json); + const struct ovsdb_column *version_column = + ovsdb_table_schema_get_column(table, "_version"); + + if (version_column) { + add_column(server, version_column, columns, columns_json); + } else { + VLOG_ERR("Table does not contain _version column."); + } } if (!initial || !insert || !delete || !modify) { diff --git a/ovsdb/ovsdb-util.c b/ovsdb/ovsdb-util.c index 303191dc8..148230da8 100644 --- a/ovsdb/ovsdb-util.c +++ b/ovsdb/ovsdb-util.c @@ -291,6 +291,15 @@ ovsdb_util_write_string_string_column(struct ovsdb_row *row, size_t i; column = ovsdb_table_schema_get_column(row->table->schema, column_name); + if (!column) { + VLOG_ERR("No %s column present in the %s table", + column_name, row->table->schema->name); + for (i = 0; i < n; i++) { + free(keys[i]); + free(values[i]); + } + return; + } datum = ovsdb_util_get_datum(row, column_name, OVSDB_TYPE_STRING, OVSDB_TYPE_STRING, UINT_MAX); if (!datum) { diff --git a/ovsdb/table.c b/ovsdb/table.c index 66071ce2f..990d49ea4 100644 --- a/ovsdb/table.c +++ b/ovsdb/table.c @@ -158,7 +158,7 @@ ovsdb_table_schema_from_json(const struct json *json, const char *name, n_max_rows = UINT_MAX; } - if (shash_is_empty(json_object(columns))) { + if (!columns || shash_is_empty(json_object(columns))) { return ovsdb_syntax_error(json, NULL, "table must have at least one column"); } -- 2.40.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
