summaryrefslogtreecommitdiff
path: root/lib/telnet.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2023-02-23 18:26:50 +0100
committerDaniel Stenberg <daniel@haxx.se>2023-02-24 16:45:58 +0100
commit9672cc640ce7e38b5abcd69a5b80bd972bc0aff3 (patch)
tree9e8d2f5b41594b1b63467dd81c7a3e6f87eabceb /lib/telnet.c
parente4f93be9d5875464b6bda1872dbcb845d3268beb (diff)
downloadcurl-9672cc640ce7e38b5abcd69a5b80bd972bc0aff3.tar.gz
telnet: parse NEW_ENVIRON without sscanf
Closes #10596
Diffstat (limited to 'lib/telnet.c')
-rw-r--r--lib/telnet.c21
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,