strparse: switch the API to work on 'const char *'

The functions are not meant to touch the input anyway.

Closes #16316
This commit is contained in:
Daniel Stenberg 2025-02-13 09:00:08 +01:00
parent c1341813bd
commit 92611f2a56
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
8 changed files with 43 additions and 41 deletions

View File

@ -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

View File

@ -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))

View File

@ -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 */

View File

@ -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"

View File

@ -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};

View File

@ -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)) {

View File

@ -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 */

View File

@ -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));