]> granicus.if.org Git - p11-kit/commitdiff
uri: Make scheme comparison case-insensitive
authorDaiki Ueno <dueno@redhat.com>
Thu, 24 May 2018 09:12:21 +0000 (11:12 +0200)
committerDaiki Ueno <ueno@gnu.org>
Fri, 25 May 2018 10:50:54 +0000 (12:50 +0200)
RFC 3986 suggests that implementations should accept uppercase letters
as equivalent to lowercase in scheme names.

p11-kit/test-uri.c
p11-kit/uri.c

index eb743b4f8daf1fc2c87a8e6c94a112d09971c649..f33687ecdf9cb5a4cb41a2a08621d3f108b158dc 100644 (file)
@@ -102,6 +102,26 @@ test_uri_parse (void)
        p11_kit_uri_free (uri);
 }
 
+static void
+test_uri_parse_case_insensitive (void)
+{
+       P11KitUri *uri;
+       int ret;
+
+       uri = p11_kit_uri_new ();
+       assert_ptr_not_null (uri);
+
+       ret = p11_kit_uri_parse ("PKCS11:", P11_KIT_URI_FOR_MODULE, uri);
+       assert_num_eq (P11_KIT_URI_OK, ret);
+
+       assert (is_module_empty (uri));
+       assert (is_slot_empty (uri));
+       assert (is_token_empty (uri));
+       assert (are_attributes_empty (uri));
+
+       p11_kit_uri_free (uri);
+}
+
 static void
 test_uri_parse_bad_scheme (void)
 {
@@ -1619,6 +1639,7 @@ main (int argc,
       char *argv[])
 {
        p11_test (test_uri_parse, "/uri/test_uri_parse");
+       p11_test (test_uri_parse_case_insensitive, "/uri/test_uri_parse_case_insensitive");
        p11_test (test_uri_parse_bad_scheme, "/uri/test_uri_parse_bad_scheme");
        p11_test (test_uri_parse_with_label, "/uri/test_uri_parse_with_label");
        p11_test (test_uri_parse_with_empty_label, "/uri/test_uri_parse_with_empty_label");
index 9743a457b997f095f6702c772ea6c22c3cbfc5c4..450a11eb5c6f10d1f0721ac2f642117f00c6a4ec 100644 (file)
@@ -1628,7 +1628,7 @@ p11_kit_uri_parse (const char *string, P11KitUriType uri_type,
 {
        const char *spos, *epos;
        int ret;
-       size_t length;
+       size_t length, i;
        char *allocated = NULL;
 
        assert (string);
@@ -1648,8 +1648,14 @@ p11_kit_uri_parse (const char *string, P11KitUriType uri_type,
                free (allocated);
                return P11_KIT_URI_BAD_SCHEME;
        }
-       ret = strncmp (string, P11_KIT_URI_SCHEME, strlen (P11_KIT_URI_SCHEME));
-       if (ret != 0) {
+       if (epos - string != P11_KIT_URI_SCHEME_LEN) {
+               free (allocated);
+               return P11_KIT_URI_BAD_SCHEME;
+       }
+       for (i = 0; i < P11_KIT_URI_SCHEME_LEN; i++)
+               if (p11_ascii_tolower (string[i]) != P11_KIT_URI_SCHEME[i])
+                       break;
+       if (i != P11_KIT_URI_SCHEME_LEN) {
                free (allocated);
                return P11_KIT_URI_BAD_SCHEME;
        }