]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
test1621: Improve stripcredentials tests
authorDan Fandrich <dan@coneharvesters.com>
Wed, 7 May 2025 06:39:22 +0000 (23:39 -0700)
committerDan Fandrich <dan@coneharvesters.com>
Sat, 10 May 2025 22:07:53 +0000 (15:07 -0700)
- add more unusual input cases
- add a valid non-http protocol
- fix tests so an input that should be stripped but isn't is a failure
- fix detection of when stripcredentials() would be available to test
- avoid using a NULL pointer

Closes #17304

tests/data/test1621
tests/tunit/tool1621.c

index cfd6ccbd9dc4f04c0b854f6627818106d2d8ae29..4a6ad5e9b0e794510b8fd1480d724380c5a70446 100644 (file)
@@ -15,6 +15,7 @@ none
 <features>
 unittest
 https
+pop3s
 </features>
 <name>
 unit tests for stripcredentials from URL
index c384e044d7456e0f1a8188869467806816e9689a..b6135e4e6471c2817f5f19ba0e0ea520f9fcda40 100644 (file)
@@ -37,9 +37,9 @@ static void unit_stop(void)
 {
 }
 
-#if defined(__MINGW32__)  || \
-  (!defined(HAVE_FSETXATTR) && \
-  (!defined(__FreeBSD_version) || (__FreeBSD_version < 500000)))
+#ifndef USE_XATTR
+/* stripcredentials isn't available in this case */
+
 UNITTEST_START
 UNITTEST_STOP
 #else
@@ -52,13 +52,24 @@ struct checkthis {
 };
 
 static const struct checkthis tests[] = {
-  { "ninja://foo@example.com", "ninja://foo@example.com" },
+  { "ninja://foo@example.com", "(null)" },  /* unsupported scheme */
+  { "pop3s://foo@example.com", "pop3s://example.com/" },
+  { "ldap://foo@example.com", "ldap://example.com/" },
   { "https://foo@example.com", "https://example.com/" },
   { "https://localhost:45", "https://localhost:45/" },
   { "https://foo@localhost:45", "https://localhost:45/" },
   { "http://daniel:password@localhost", "http://localhost/" },
   { "http://daniel@localhost", "http://localhost/" },
+  { "https://user:pass@localhost:45", "https://localhost:45/" },
   { "http://localhost/", "http://localhost/" },
+  { "http://odd%40host/", "(null)" },  /* bad host */
+  { "http://user@odd%40host/", "(null)" },  /* bad host */
+  { "http://host/@path/", "http://host/@path/" },
+  { "http://emptypw:@host/", "http://host/" },
+  { "http://:emptyuser@host/", "http://host/" },
+  { "http://odd%40user@host/", "http://host/" },
+  { "http://only%40one%40host/", "(null)" },  /* bad host */
+  { "http://odder%3auser@host/", "http://host/" },
   { NULL, NULL } /* end marker */
 };
 
@@ -69,11 +80,11 @@ UNITTEST_START
   for(i = 0; tests[i].input; i++) {
     const char *url = tests[i].input;
     char *stripped = stripcredentials(url);
+    char *strippedstr = stripped ? stripped : "(null)";
     printf("Test %u got input \"%s\", output: \"%s\"\n",
-           i, tests[i].input, stripped);
+           i, tests[i].input, strippedstr);
 
-    fail_if(stripped && strcmp(tests[i].output, stripped),
-            tests[i].output);
+    fail_if(strcmp(tests[i].output, strippedstr), tests[i].output);
     curl_free(stripped);
   }
 }