summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2021-09-16 08:40:21 +0200
committerDaniel Stenberg <daniel@haxx.se>2021-09-16 12:36:12 +0200
commitda2598f823e95020defd54c6fdf3c82331ef12b3 (patch)
tree86f8b1f9723dc45d94b58ec90eec52bf01275f4b /tests
parent5b7aaefc07de0638f84cc9ef6c813123e7128cba (diff)
downloadcurl-da2598f823e95020defd54c6fdf3c82331ef12b3.tar.gz
hsts: CURLSTS_FAIL from hsts read callback should fail transfer
... and have CURLE_ABORTED_BY_CALLBACK returned. Extended test 1915 to verify. Reported-by: Jonathan Cardoso Fixes #7726 Closes #7729
Diffstat (limited to 'tests')
-rw-r--r--tests/data/test19157
-rw-r--r--tests/libtest/lib1915.c23
2 files changed, 28 insertions, 2 deletions
diff --git a/tests/data/test1915 b/tests/data/test1915
index d0b2862f9..544dd4f41 100644
--- a/tests/data/test1915
+++ b/tests/data/test1915
@@ -36,15 +36,18 @@ http://%HOSTIP:%NOLISTENPORT/not-there/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
-# it fails because there's nothing on that port
+# 7 CURLE_COULDNT_CONNECT (expected since there's nothing listening there)
+# 42 CURLE_ABORTED_BY_CALLBACK
<errorcode>
-7
+42
</errorcode>
<stdout>
[0/4] 1.example.com 20370320 01:02:03
[1/4] 2.example.com 20370320 03:02:01
[2/4] 3.example.com 20370319 01:02:03
[3/4] 4.example.com unlimited
+First request returned 7
+Second request returned 42
</stdout>
</verify>
</testcase>
diff --git a/tests/libtest/lib1915.c b/tests/libtest/lib1915.c
index 2bd6ffce8..329f35453 100644
--- a/tests/libtest/lib1915.c
+++ b/tests/libtest/lib1915.c
@@ -65,6 +65,16 @@ static CURLSTScode hstsread(CURL *easy, struct curl_hstsentry *e,
return CURLSTS_OK;
}
+/* verify error from callback */
+static CURLSTScode hstsreadfail(CURL *easy, struct curl_hstsentry *e,
+ void *userp)
+{
+ (void)easy;
+ (void)e;
+ (void)userp;
+ return CURLSTS_FAIL;
+}
+
/* check that we get the hosts back in the save */
static CURLSTScode hstswrite(CURL *easy, struct curl_hstsentry *e,
struct curl_index *i, void *userp)
@@ -97,6 +107,19 @@ int test(char *URL)
curl_easy_setopt(hnd, CURLOPT_HSTS_CTRL, CURLHSTS_ENABLE);
ret = curl_easy_perform(hnd);
curl_easy_cleanup(hnd);
+ printf("First request returned %d\n", (int)ret);
+ }
+ hnd = curl_easy_init();
+ if(hnd) {
+ curl_easy_setopt(hnd, CURLOPT_URL, URL);
+ curl_easy_setopt(hnd, CURLOPT_HSTSREADFUNCTION, hstsreadfail);
+ curl_easy_setopt(hnd, CURLOPT_HSTSREADDATA, &st);
+ curl_easy_setopt(hnd, CURLOPT_HSTSWRITEFUNCTION, hstswrite);
+ curl_easy_setopt(hnd, CURLOPT_HSTSWRITEDATA, &st);
+ curl_easy_setopt(hnd, CURLOPT_HSTS_CTRL, CURLHSTS_ENABLE);
+ ret = curl_easy_perform(hnd);
+ curl_easy_cleanup(hnd);
+ printf("Second request returned %d\n", (int)ret);
}
curl_global_cleanup();
return (int)ret;