- for (i = 0; i < sizeof(schemes) / sizeof(schemes[0]); i++)
- if (!strncasecmp(url_str, schemes[i].str, schemes[i].str_len))
- return &schemes[i];
+ url_len = strlen(url);
+
+ for (i = 0; i < sizeof(schemes) / sizeof(schemes[0]); i++) {
+ const struct pb_scheme_info *scheme = &schemes[i];
+
+ if (url_len < scheme->str_len + sep_len)
+ continue;
+
+ if (strncmp(url + scheme->str_len, sep, sep_len))
+ continue;
+
+ if (strncasecmp(url, scheme->str, scheme->str_len))
+ continue;
+
+ return scheme;
+ }