From 826a32dff31645d70fd8a91228a502ceb54db9ef Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sun, 13 Jul 2025 16:32:55 +0200 Subject: [PATCH] altsvc: accept 'clear' without semicolon as well Extend test 1654 to verify Fixes #17917 Reported-by: Luke Wilde Closes #17918 --- lib/altsvc.c | 3 +-- tests/unit/unit1654.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/altsvc.c b/lib/altsvc.c index 2ccd22ef47..59476d7325 100644 --- a/lib/altsvc.c +++ b/lib/altsvc.c @@ -486,8 +486,7 @@ CURLcode Curl_altsvc_parse(struct Curl_easy *data, DEBUGASSERT(asi); /* initial check for "clear" */ - if(!curlx_str_until(&p, &alpn, MAX_ALTSVC_LINE, ';') && - !curlx_str_single(&p, ';')) { + if(!curlx_str_cspn(&p, &alpn, ";\n\r")) { curlx_str_trimblanks(&alpn); /* "clear" is a magic keyword */ if(curlx_str_casecompare(&alpn, "clear")) { diff --git a/tests/unit/unit1654.c b/tests/unit/unit1654.c index bfed95997a..4eee6a08dd 100644 --- a/tests/unit/unit1654.c +++ b/tests/unit/unit1654.c @@ -95,6 +95,20 @@ static CURLcode test_unit1654(char *arg) fail_if(result, "Curl_altsvc_parse(7) failed!"); fail_unless(Curl_llist_count(&asi->list) == 10, "wrong number of entries"); + result = + Curl_altsvc_parse(curl, asi, + "h2=\":443\", h3=\":443\"; " + "persist = \"1\"; ma = 120;\r\n", + ALPN_h1, "curl.se", 80); + fail_if(result, "Curl_altsvc_parse(6) failed!"); + fail_unless(Curl_llist_count(&asi->list) == 12, "wrong number of entries"); + + /* clear - without semicolon */ + result = Curl_altsvc_parse(curl, asi, "clear\r\n", + ALPN_h1, "curl.se", 80); + fail_if(result, "Curl_altsvc_parse(7) failed!"); + fail_unless(Curl_llist_count(&asi->list) == 10, "wrong number of entries"); + /* only a non-existing alpn */ result = Curl_altsvc_parse(curl, asi, "h6=\"example.net:443\"; ma=\"180\";\r\n", -- 2.47.2