Imported Upstream version 2.26.0
[platform/upstream/git.git] / urlmatch.c
index 4bbde92..29272a5 100644 (file)
@@ -42,12 +42,12 @@ static int append_normalized_escapes(struct strbuf *buf,
 
                from_len--;
                if (ch == '%') {
-                       if (from_len < 2 ||
-                           !isxdigit(from[0]) ||
-                           !isxdigit(from[1]))
+                       if (from_len < 2)
                                return 0;
-                       ch = hexval(*from++) << 4;
-                       ch |= hexval(*from++);
+                       ch = hex2chr(from);
+                       if (ch < 0)
+                               return 0;
+                       from += 2;
                        from_len -= 2;
                        was_esc = 1;
                }
@@ -557,6 +557,8 @@ int urlmatch_config_entry(const char *var, const char *value, void *cb)
        const char *key, *dot;
        struct strbuf synthkey = STRBUF_INIT;
        int retval;
+       int (*select_fn)(const struct urlmatch_item *a, const struct urlmatch_item *b) =
+               collect->select_fn ? collect->select_fn : cmp_matches;
 
        if (!skip_prefix(var, collect->section, &key) || *(key++) != '.') {
                if (collect->cascade_fn)
@@ -587,7 +589,7 @@ int urlmatch_config_entry(const char *var, const char *value, void *cb)
        if (!item->util) {
                item->util = xcalloc(1, sizeof(matched));
        } else {
-               if (cmp_matches(&matched, item->util) < 0)
+               if (select_fn(&matched, item->util) < 0)
                         /*
                          * Our match is worse than the old one,
                          * we cannot use it.