Commit 36cf1db281c24d0a2fee1af3a7a80adbd263e1cb

Sven Strickroth 2020-09-09T12:26:34

Support empty values for git_config_get_mapped and git_config_lookup_map_value Signed-off-by: Sven Strickroth <email@cs-ware.de>

diff --git a/src/config.c b/src/config.c
index 79e9ea3..42f46e6 100644
--- a/src/config.c
+++ b/src/config.c
@@ -1227,9 +1227,6 @@ int git_config_lookup_map_value(
 {
 	size_t i;
 
-	if (!value)
-		goto fail_parse;
-
 	for (i = 0; i < map_n; ++i) {
 		const git_configmap *m = maps + i;
 
@@ -1252,7 +1249,7 @@ int git_config_lookup_map_value(
 			break;
 
 		case GIT_CONFIGMAP_STRING:
-			if (strcasecmp(value, m->str_match) == 0) {
+			if (value && strcasecmp(value, m->str_match) == 0) {
 				*out = m->map_value;
 				return 0;
 			}
@@ -1260,7 +1257,6 @@ int git_config_lookup_map_value(
 		}
 	}
 
-fail_parse:
 	git_error_set(GIT_ERROR_CONFIG, "failed to map '%s'", value);
 	return -1;
 }
diff --git a/tests/config/read.c b/tests/config/read.c
index d28d65c..1bfd85e 100644
--- a/tests/config/read.c
+++ b/tests/config/read.c
@@ -955,11 +955,13 @@ void test_config_read__get_mapped(void)
 	cl_git_mkfile("./testconfig", "[header]\n  key1 = 1\n  key2 = true\n  key3\n  key4 = always\n  key5 = false\n  key6 = 0\n  key7 = never\n");
 	cl_git_pass(git_config_open_ondisk(&cfg, "./testconfig"));
 
-	// check aprsing bool and string
+	// check parsing bool and string
 	cl_git_pass(git_config_get_mapped(&val, cfg, "header.key1", _test_map1, ARRAY_SIZE(_test_map1)));
 	cl_assert_equal_i(val, MAP_TRUE);
 	cl_git_pass(git_config_get_mapped(&val, cfg, "header.key2", _test_map1, ARRAY_SIZE(_test_map1)));
 	cl_assert_equal_i(val, MAP_TRUE);
+	cl_git_pass(git_config_get_mapped(&val, cfg, "header.key3", _test_map1, ARRAY_SIZE(_test_map1)));
+	cl_assert_equal_i(val, MAP_TRUE);
 
 	cl_git_pass(git_config_get_mapped(&val, cfg, "header.key4", _test_map1, ARRAY_SIZE(_test_map1)));
 	cl_assert_equal_i(val, MAP_ALWAYS);