Today there is no sanity checking of what happens when extensions.objectFormat is specified multiple times. Catch confused git configurations by only allowing this option to be specified once. Signed-off-by: "Eric W. Biederman" <ebiederm@xxxxxxxxxxxx> --- setup.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/setup.c b/setup.c index 18927a847b86..ef9f79b8885e 100644 --- a/setup.c +++ b/setup.c @@ -580,6 +580,7 @@ static enum extension_result handle_extension(const char *var, if (!strcmp(ext, "noop-v1")) { return EXTENSION_OK; } else if (!strcmp(ext, "objectformat")) { + struct string_list_item *item; int format; if (!value) @@ -588,6 +589,13 @@ static enum extension_result handle_extension(const char *var, if (format == GIT_HASH_UNKNOWN) return error(_("invalid value for '%s': '%s'"), "extensions.objectformat", value); + /* Only support objectFormat being specified once. */ + for_each_string_list_item(item, &data->v1_only_extensions) { + if (!strcmp(item->string, "objectformat")) + return error(_("'%s' already specified as '%s'"), + "extensions.objectformat", + hash_algos[data->hash_algo].name); + } data->hash_algo = format; return EXTENSION_OK; } -- 2.41.0