diff options
author | Daniel Stenberg <daniel@haxx.se> | 2023-02-23 18:26:50 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2023-02-24 16:45:58 +0100 |
commit | 9672cc640ce7e38b5abcd69a5b80bd972bc0aff3 (patch) | |
tree | 9e8d2f5b41594b1b63467dd81c7a3e6f87eabceb /lib/telnet.c | |
parent | e4f93be9d5875464b6bda1872dbcb845d3268beb (diff) | |
download | curl-9672cc640ce7e38b5abcd69a5b80bd972bc0aff3.tar.gz |
telnet: parse NEW_ENVIRON without sscanf
Closes #10596
Diffstat (limited to 'lib/telnet.c')
-rw-r--r-- | lib/telnet.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/lib/telnet.c b/lib/telnet.c index b82777b62..720fbd10a 100644 --- a/lib/telnet.c +++ b/lib/telnet.c @@ -908,8 +908,6 @@ static void suboption(struct Curl_easy *data) ssize_t bytes_written; size_t len; int err; - char varname[128] = ""; - char varval[128] = ""; struct TELNET *tn = data->req.p.telnet; struct connectdata *conn = data->conn; @@ -947,19 +945,18 @@ static void suboption(struct Curl_easy *data) for(v = tn->telnet_vars; v; v = v->next) { size_t tmplen = (strlen(v->data) + 1); - /* Add the variable only if it fits */ + /* Add the variable if it fits */ if(len + tmplen < (int)sizeof(temp)-6) { - int rv; - char sep[2] = ""; - varval[0] = 0; - rv = sscanf(v->data, "%127[^,]%1[,]%127s", varname, sep, varval); - if(rv == 1) + char *s = strchr(v->data, ','); + if(!s) len += msnprintf((char *)&temp[len], sizeof(temp) - len, - "%c%s", CURL_NEW_ENV_VAR, varname); - else if(rv >= 2) + "%c%s", CURL_NEW_ENV_VAR, v->data); + else { + size_t vlen = s - v->data; len += msnprintf((char *)&temp[len], sizeof(temp) - len, - "%c%s%c%s", CURL_NEW_ENV_VAR, varname, - CURL_NEW_ENV_VALUE, varval); + "%c%.*s%c%s", CURL_NEW_ENV_VAR, + (int)vlen, v->data, CURL_NEW_ENV_VALUE, ++s); + } } } msnprintf((char *)&temp[len], sizeof(temp) - len, |