X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ovsdb%2Fcolumn.c;h=73dc9c24c16015d97dc8d0b5945e45ca2335fc88;hb=5aa006354872e40c227b601f0e0deb4fd72eb9f6;hp=dc93dc71b7fdcb9b6bdf187c15b8b6480ea8e165;hpb=58fda1dab104041fc693032475ec4662c1a52849;p=openvswitch diff --git a/ovsdb/column.c b/ovsdb/column.c index dc93dc71..73dc9c24 100644 --- a/ovsdb/column.c +++ b/ovsdb/column.c @@ -143,6 +143,7 @@ ovsdb_column_set_from_json(const struct json *json, return NULL; } else { + struct ovsdb_error *error = NULL; size_t i; if (json->type != JSON_ARRAY) { @@ -152,26 +153,34 @@ ovsdb_column_set_from_json(const struct json *json, /* XXX this is O(n**2) */ for (i = 0; i < json->u.array.n; i++) { struct ovsdb_column *column; + const char *s; if (json->u.array.elems[i]->type != JSON_STRING) { goto error; } - column = shash_find_data(&table->schema->columns, - json->u.array.elems[i]->u.string); - if (ovsdb_column_set_contains(set, column->index)) { + s = json->u.array.elems[i]->u.string; + column = shash_find_data(&table->schema->columns, s); + if (!column) { + error = ovsdb_syntax_error(json, NULL, "%s is not a valid " + "column name", s); + goto error; + } else if (ovsdb_column_set_contains(set, column->index)) { goto error; } ovsdb_column_set_add(set, column); } - return NULL; - } -error: - ovsdb_column_set_destroy(set); - return ovsdb_syntax_error(json, NULL, - "array of distinct column names expected"); + error: + ovsdb_column_set_destroy(set); + ovsdb_column_set_init(set); + if (!error) { + error = ovsdb_syntax_error(json, NULL, "array of distinct column " + "names expected"); + } + return error; + } } struct json *