From: Daniel Stenberg Date: Thu, 13 Feb 2025 08:00:08 +0000 (+0100) Subject: strparse: switch the API to work on 'const char *' X-Git-Tag: curl-8_13_0~499 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=92611f2a5660faddab8dc3cb1101bcfdb08375e0;p=thirdparty%2Fcurl.git strparse: switch the API to work on 'const char *' The functions are not meant to touch the input anyway. Closes #16316 --- diff --git a/lib/altsvc.c b/lib/altsvc.c index 095b3c168a..e269079388 100644 --- a/lib/altsvc.c +++ b/lib/altsvc.c @@ -149,7 +149,7 @@ static struct altsvc *altsvc_create(struct Curl_str *srchost, } /* only returns SERIOUS errors */ -static CURLcode altsvc_add(struct altsvcinfo *asi, char *line) +static CURLcode altsvc_add(struct altsvcinfo *asi, const char *line) { /* Example line: h2 example.com 443 h3 shiny.example.com 8443 "20191231 10:00:00" 1 diff --git a/lib/connect.c b/lib/connect.c index 67cdb54d31..7b7fa785fe 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -87,7 +87,7 @@ #if !defined(CURL_DISABLE_ALTSVC) || defined(USE_HTTPSRR) -enum alpnid Curl_alpn2alpnid(char *name, size_t len) +enum alpnid Curl_alpn2alpnid(const char *name, size_t len) { if(len == 2) { if(strncasecompare(name, "h1", 2)) diff --git a/lib/connect.h b/lib/connect.h index b59c38d7ce..cbfe294c92 100644 --- a/lib/connect.h +++ b/lib/connect.h @@ -32,7 +32,7 @@ struct Curl_dns_entry; struct ip_quadruple; -enum alpnid Curl_alpn2alpnid(char *name, size_t len); +enum alpnid Curl_alpn2alpnid(const char *name, size_t len); /* generic function that returns how much time there is left to run, according to the timeouts set */ diff --git a/lib/hsts.c b/lib/hsts.c index 99452b61a6..1dcaf026ac 100644 --- a/lib/hsts.c +++ b/lib/hsts.c @@ -416,7 +416,7 @@ skipsave: } /* only returns SERIOUS errors */ -static CURLcode hsts_add(struct hsts *h, char *line) +static CURLcode hsts_add(struct hsts *h, const char *line) { /* Example lines: example.com "20191231 10:00:00" diff --git a/lib/http_aws_sigv4.c b/lib/http_aws_sigv4.c index c217d0d8e6..2fbb8de13a 100644 --- a/lib/http_aws_sigv4.c +++ b/lib/http_aws_sigv4.c @@ -390,7 +390,8 @@ static CURLcode calc_payload_hash(struct Curl_easy *data, #define S3_UNSIGNED_PAYLOAD "UNSIGNED-PAYLOAD" static CURLcode calc_s3_payload_hash(struct Curl_easy *data, - Curl_HttpReq httpreq, char *provider1, + Curl_HttpReq httpreq, + const char *provider1, size_t plen, unsigned char *sha_hash, char *sha_hex, char *header) @@ -576,7 +577,7 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy) CURLcode result = CURLE_OUT_OF_MEMORY; struct connectdata *conn = data->conn; size_t len; - char *line; + const char *line; struct Curl_str provider0; struct Curl_str provider1; struct Curl_str region = { NULL, 0}; diff --git a/lib/strparse.c b/lib/strparse.c index dce08251f8..b43b5415af 100644 --- a/lib/strparse.c +++ b/lib/strparse.c @@ -26,10 +26,10 @@ /* Get a word until the first DELIM or end of string. At least one byte long. return non-zero on error */ -int Curl_str_until(char **linep, struct Curl_str *out, +int Curl_str_until(const char **linep, struct Curl_str *out, const size_t max, char delim) { - char *s = *linep; + const char *s = *linep; size_t len = 0; DEBUGASSERT(linep && *linep && out && max && delim); @@ -51,7 +51,7 @@ int Curl_str_until(char **linep, struct Curl_str *out, /* Get a word until the first space or end of string. At least one byte long. return non-zero on error */ -int Curl_str_word(char **linep, struct Curl_str *out, +int Curl_str_word(const char **linep, struct Curl_str *out, const size_t max) { return Curl_str_until(linep, out, max, ' '); @@ -60,10 +60,10 @@ int Curl_str_word(char **linep, struct Curl_str *out, /* Get a "quoted" word. No escaping possible. return non-zero on error */ -int Curl_str_quotedword(char **linep, struct Curl_str *out, +int Curl_str_quotedword(const char **linep, struct Curl_str *out, const size_t max) { - char *s = *linep; + const char *s = *linep; size_t len = 0; DEBUGASSERT(linep && *linep && out && max); @@ -87,7 +87,7 @@ int Curl_str_quotedword(char **linep, struct Curl_str *out, /* Advance over a single character. return non-zero on error */ -int Curl_str_single(char **linep, char byte) +int Curl_str_single(const char **linep, char byte) { DEBUGASSERT(linep && *linep); if(**linep != byte) @@ -98,14 +98,14 @@ int Curl_str_single(char **linep, char byte) /* Advance over a single space. return non-zero on error */ -int Curl_str_singlespace(char **linep) +int Curl_str_singlespace(const char **linep) { return Curl_str_single(linep, ' '); } /* Get an unsigned number. Leading zeroes are accepted. return non-zero on error */ -int Curl_str_number(char **linep, size_t *nump, size_t max) +int Curl_str_number(const char **linep, size_t *nump, size_t max) { size_t num = 0; DEBUGASSERT(linep && *linep && nump); @@ -125,7 +125,7 @@ int Curl_str_number(char **linep, size_t *nump, size_t max) /* CR or LF return non-zero on error */ -int Curl_str_newline(char **linep) +int Curl_str_newline(const char **linep) { DEBUGASSERT(linep && *linep); if(ISNEWLINE(**linep)) { diff --git a/lib/strparse.h b/lib/strparse.h index 189927b059..dfae898f5b 100644 --- a/lib/strparse.h +++ b/lib/strparse.h @@ -35,37 +35,38 @@ #define STRE_OVERFLOW 7 struct Curl_str { - char *str; + const char *str; size_t len; }; /* Get a word until the first space return non-zero on error */ -int Curl_str_word(char **linep, struct Curl_str *out, const size_t max); +int Curl_str_word(const char **linep, struct Curl_str *out, const size_t max); /* Get a word until the first DELIM or end of string return non-zero on error */ -int Curl_str_until(char **linep, struct Curl_str *out, const size_t max, +int Curl_str_until(const char **linep, struct Curl_str *out, const size_t max, char delim); /* Get a "quoted" word. No escaping possible. return non-zero on error */ -int Curl_str_quotedword(char **linep, struct Curl_str *out, const size_t max); +int Curl_str_quotedword(const char **linep, struct Curl_str *out, + const size_t max); /* Advance over a single character. return non-zero on error */ -int Curl_str_single(char **linep, char byte); +int Curl_str_single(const char **linep, char byte); /* Advance over a single space. return non-zero on error */ -int Curl_str_singlespace(char **linep); +int Curl_str_singlespace(const char **linep); /* Get an unsigned number return non-zero on error */ -int Curl_str_number(char **linep, size_t *nump, size_t max); +int Curl_str_number(const char **linep, size_t *nump, size_t max); /* Check for CR or LF return non-zero on error */ -int Curl_str_newline(char **linep); +int Curl_str_newline(const char **linep); #endif /* HEADER_CURL_STRPARSE_H */ diff --git a/tests/unit/unit1664.c b/tests/unit/unit1664.c index 3a2da81ffe..0c22f9164a 100644 --- a/tests/unit/unit1664.c +++ b/tests/unit/unit1664.c @@ -67,8 +67,8 @@ UNITTEST_START printf("Curl_str_word\n"); for(i = 0; wordparse[i]; i++) { struct Curl_str out; - char *line = (char *)wordparse[i]; - char *orgline = line; + const char *line = wordparse[i]; + const char *orgline = line; int rc = Curl_str_word(&line, &out, 7); printf("%u: (\"%s\") %d, \"%.*s\" [%d], line %d\n", i, orgline, rc, (int)out.len, out.str, (int)out.len, @@ -78,8 +78,8 @@ UNITTEST_START printf("Curl_str_until\n"); for(i = 0; wordparse[i]; i++) { struct Curl_str out; - char *line = (char *)wordparse[i]; - char *orgline = line; + const char *line = wordparse[i]; + const char *orgline = line; int rc = Curl_str_until(&line, &out, 7, 'd'); printf("%u: (\"%s\") %d, \"%.*s\" [%d], line %d\n", i, orgline, rc, (int)out.len, out.str, (int)out.len, @@ -106,8 +106,8 @@ UNITTEST_START printf("Curl_str_quotedword\n"); for(i = 0; qwords[i]; i++) { struct Curl_str out; - char *line = (char *)qwords[i]; - char *orgline = line; + const char *line = qwords[i]; + const char *orgline = line; int rc = Curl_str_quotedword(&line, &out, 7); printf("%u: (\"%s\") %d, \"%.*s\" [%d], line %d\n", i, orgline, rc, (int)out.len, out.str, (int)out.len, @@ -128,8 +128,8 @@ UNITTEST_START }; printf("Curl_str_single\n"); for(i = 0; single[i]; i++) { - char *line = (char *)single[i]; - char *orgline = line; + const char *line = single[i]; + const char *orgline = line; int rc = Curl_str_single(&line, 'a'); printf("%u: (\"%s\") %d, line %d\n", i, orgline, rc, (int)(line - orgline)); @@ -150,8 +150,8 @@ UNITTEST_START }; printf("Curl_str_singlespace\n"); for(i = 0; single[i]; i++) { - char *line = (char *)single[i]; - char *orgline = line; + const char *line = single[i]; + const char *orgline = line; int rc = Curl_str_singlespace(&line); printf("%u: (\"%s\") %d, line %d\n", i, orgline, rc, (int)(line - orgline)); @@ -171,8 +171,8 @@ UNITTEST_START }; printf("Curl_str_single\n"); for(i = 0; single[i]; i++) { - char *line = (char *)single[i]; - char *orgline = line; + const char *line = single[i]; + const char *orgline = line; int rc = Curl_str_single(&line, 'a'); printf("%u: (\"%s\") %d, line %d\n", i, orgline, rc, (int)(line - orgline)); @@ -197,8 +197,8 @@ UNITTEST_START printf("Curl_str_number\n"); for(i = 0; nums[i]; i++) { size_t num; - char *line = (char *)nums[i]; - char *orgline = line; + const char *line = nums[i]; + const char *orgline = line; int rc = Curl_str_number(&line, &num, 1235); printf("%u: (\"%s\") %d, [%u] line %d\n", i, orgline, rc, (int)num, (int)(line - orgline)); @@ -218,8 +218,8 @@ UNITTEST_START printf("Curl_str_number / max\n"); for(i = 0; nums[i]; i++) { size_t num; - char *line = (char *)nums[i]; - char *orgline = line; + const char *line = nums[i]; + const char *orgline = line; int rc = Curl_str_number(&line, &num, SIZE_T_MAX); printf("%u: (\"%s\") %d, [%zu] line %d\n", i, orgline, rc, num, (int)(line - orgline)); @@ -242,8 +242,8 @@ UNITTEST_START }; printf("Curl_str_newline\n"); for(i = 0; newl[i]; i++) { - char *line = (char *)newl[i]; - char *orgline = line; + const char *line = newl[i]; + const char *orgline = line; int rc = Curl_str_newline(&line); printf("%u: (\"%s\") %d, line %d\n", i, orgline, rc, (int)(line - orgline));